go语言之字符串的两种遍历方式

在go语言中支持两种方式遍历字符串。第一种方式是以字节数组的方式遍历。例如代码:
str := "beijing,北京"
for i := 0; i < len(str); i++{
	fmt.Println(i, " ", str[i])
}

输入结果为:

0 98
1 101
....
10   151
11   228
12   186
13   172

可以看出,这个字符串长度为14,尽管从直观上来说,这个字符串应该只有10个字符,这是因为每个中文字符在UTF-8中占3个字节,而不是1个字节。

第二种方式是以Unicode字符遍历,例如代码:

str := "beijing,北京"
for index, val := range str {
	fmt.Println(index, " ", val)
}

输出结果为:

0   98
1   101
......
7   44
8   21271
11   20140
以Unicode字符方式遍历时,每个字符的类型是rune,而不是byte。rune类型在go语言中占用四个字节。
在go语言中支持两个字符类型,一个是byte(实际上是uint8的别名),代表UTF-8字符串的单个字节的值,另一个是rune,代表单个Unicode字符。

猜你喜欢

转载自blog.csdn.net/yang20141109/article/details/80372641