golang的字符串(string)有两种类型:
一种是byte类型,或者叫uint8类型,代表ASCII码的一个字符;
一种是rune类型,或者叫int32类型,代表UTF-8的一个字符,当需要处理中文、日文等unicode字符时,则需要用到 rune 类型。
UTF-8是unicode的一种。
func main() {
travelString()
updateString()
countHanString()
}
func travelString() {
str := "hello傅里叶"
// byte类型
for i := 0; i < len(str); i++ {
fmt.Printf("%v(%c) ", str[i], str[i])
}
fmt.Println()
// rune类型
for _, s := range str {
fmt.Printf("%v(%c) ", s, s)
}
fmt.Println()
}
func updateString() {
str1 := "hello"
byteStr := []byte(str1) // 强制类型转换
byteStr[0] = 'a'
fmt.Println(string(byteStr))
str2 := "傅里叶"
runeStr := []rune(str2) // 强制类型转换
runeStr[0] = '佛'
fmt.Println(string(runeStr))
}
func countHanString() {
str := "hello傅里叶"
var count int
for _, s := range str {
if unicode.Is(unicode.Han, s) {
count++
}
}
fmt.Println(count)
}
output:
104(h) 101(e) 108(l) 108(l) 111(o) 229(å) 130() 133() 233(é) 135() 140() 229(å) 143() 182(¶)
104(h) 101(e) 108(l) 108(l) 111(o) 20613(傅) 37324(里) 21494(叶)
aello
佛里叶
3