深入解析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个字节标识,一个英文字符使用一个字节标识。