深入解析Go语言中的字符串操作
发表时间: 2024-06-06 07:42
想知道一个字符串中字节长度使用len(s),想知道一个字符串中包含字符个数使用utf8.RuneCountInString(s),如果想要一个个遍历字符串中的字符,使用
for idx, runeValue := range s {
fmt.Printf("%#U starts at %d\n", runeValue, idx)
}
string 和rune示例代码如下:
package mainimport ( "fmt" "unicode/utf8")func main() { const s = "我爱中国" // 定义一个常量字符串 fmt.Println("Len:", len(s)) // 打印字符串的字节长度 // 遍历字符串的每个字节,并以16进制格式打印出来 for i := 0; i < len(s); i++ { fmt.Printf("%x ", s[i]) } fmt.Println() // 打印一个空行 // 使用utf8包的RuneCountInString函数计算字符串中的rune数量 fmt.Println("Rune count:", utf8.RuneCountInString(s)) // 使用range遍历字符串中的每个rune,打印其Unicode表示和在字符串中的起始字节位置 for idx, runeValue := range s { fmt.Printf("%#U starts at %d\n", runeValue, idx) } // 打印分隔符 fmt.Println("\nUsing DecodeRuneInString") // 使用utf8.DecodeRuneInString函数遍历字符串中的每个rune, // 并打印其Unicode表示和在字符串中的起始字节位置 for i, w := 0, 0; i < len(s); i += w { runeValue, width := utf8.DecodeRuneInString(s[i:]) fmt.Printf("%#U starts at %d\n", runeValue, i) w = width // 调用examineRune函数,检查当前rune的值 examineRune(runeValue) }}// examineRune函数用于检查rune的值,并打印相应的消息func examineRune(r rune) { if r == 't' { fmt.Println("found tee") // 如果rune是'我',打印“found 我” } else if r == '我' { fmt.Println("found 我") }}
运行上面代码得到的输出如下
延升阅读:
rune 是一种数据类型,表示一个 Unicode 码点。具体来说,rune 是 int32 的别名,用于更清晰地表达字符的概念。rune 类型在 Go 中的使用和理解是处理 Unicode 和多字节字符的重要部分。
Unicode码有三种编码方式,UTF-8、UTF-16、UTF-32。Golang中采用UTF-8的格式编码。一个中文使用3个字节标识,一个英文字符使用一个字节标识。