我们可以通过从字符串中转换符文切片的长度来获得字符串中的符文数。
s := "世界"
runes := []rune(s)
fmt.Println(len(runes))或者在RuneCountInString包中使用unicode/utf8函数。
fmt.Println(utf8.RuneCountInString(s))这两者有什么区别?
发布于 2018-03-21 05:37:29
不同的是,第一个问题是:
runes := []rune(s)
length := len(runes)必须逐步遍历s来构建rune的一个片段,然后询问该切片有多长时间,而utf8.RuneCountInString只要看到构成UTF-8字符的连续字节序列,就可以通过字节逐个递增计数器。
[]rune(s)版本必须比utf8.RuneCountInString做更多的工作。
粗略地在源代码中徘徊的一点表明,[]rune(someString)是由stringtoslicerune实现的,它实际上对字符串进行了两次迭代:一个是查找有多少个rune,另一个是将这些rune复制到一个片段中。我对此不太确定,因为我不太熟悉Go的实现细节。
https://stackoverflow.com/questions/49397913
复制相似问题