1

我们可以通过获取从字符串转换的符文切片的长度来获取字符串中符文的数量。

s := "世界"
runes := []rune(s)
fmt.Println(len(runes))

或者使用包中的RuneCountInString函数unicode/utf8

fmt.Println(utf8.RuneCountInString(s))

两者有什么区别?

4

1 回答 1

3

不同的是第一个:

runes  := []rune(s)
length := len(runes)

必须逐步s构建runes 的切片,然后询问该切片有多长,而只要看到构成 UTF-8 字符的连续字节序列,utf8.RuneCountInString只需逐字节递增计数器。s

[]rune(s)版本必须做更多的工作utf8.RuneCountInString


粗略地浏览一下源代码表明,它实际上是[]rune(someString)通过stringtoslicerune对字符串进行两次迭代来实现的:一个两个找出有多少runes ,另一个将这些runes 复制到一个切片中。我不确定这一点,因为我对 Go 的实现细节不太熟悉。

于 2018-03-21T05:37:29.943 回答