go之字符串
len
字符串长度,len指的是字节
package main
import (
"fmt"
"unicode/utf8"
)
func main() {
var s ="hello world"
fmt.Println(len(s)) //11 11个字符,11 字节
var s1 ="hello world 中国"
fmt.Println(len(s1)) //18 14个字符,18 字节 ,utf-8编码一个中文字符,占3个字节
fmt.Println(utf8.RuneCountInString(s1)) //// run 是字符 14
}
for循环字符串
package main
import (
"fmt"
"unicode/utf8"
)
func main() {
var s ="hello world"
var s1 ="hello world 中国"
for _,v:=range s{ // range循环的就是字符
fmt.Println(string(v))
}
for i:=0;i<len(s);i++{ // 按字节循环,转成字符串会出乱码
fmt.Println(string(s[i]))
}
for i:=0;i<utf8.RuneCountInString(s);i++{ // 按字节循环,转成字符串会出乱码
fmt.Println(string(s[i])) // 按字节取,取出来转还是有问题,还是要用range循环
}
for _,v:=range s1{
fmt.Println(string(v))
}
for i:=0;i<len(s1);i++{
fmt.Println(string(s1[i]))
}
for i:=0;i<utf8.RuneCountInString(s1);i++{
fmt.Println(string(s1[i]))
}
}
字符串是不可变的
package main
import (
"fmt"
)
func main() {
var s ="hello world 中国"
//s[0]='h'
fmt.Println(s[0]) // s是unicode编码的104
}
通过字节切片
package main
import (
"fmt"
)
func main() {
var b []byte=[]byte{104,105,106,'a'}
fmt.Println(string(b)) //hija
}
根据字符切片构造
package main
import (
"fmt"
)
func main() {
var b []rune=[]rune{104,105,10688,'中'}
fmt.Println(string(b)) //hij中
}
字符串和字节切片,和字符切片相互转换
根据字符取值,没有操作,转成字符切片,再取
package main
import (
"fmt"
)
func main() {
var s ="hello world 中国"
var b []rune=[]rune(s)
fmt.Println(b[12]) //20013
fmt.Println(string(b[13])) //国
}
package main
import (
"fmt"
)
func main() {
var s ="hello world 中国"
var b []byte=[]byte(s)
fmt.Println(b[10]) //100
fmt.Println(string(b[10])) //d
}

浙公网安备 33010602011771号