如何获取字符串中的字符数?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (24)

如何获取Go中字符串的字符数?

例如,如果我有一个字符串"hello"方法应该返回5...。我看到了len(str)返回字节数。而不是这样的字符数len("£")返回2而不是1,因为英镑是用UTF-8中的两个字节编码的。

提问于
用户回答回答于

你可以尝试RuneCountInString从utf8包。

返回p中的符文数

即,在说明这个脚本:“世界”的长度可能是6(写入时在中国:“世界”),但它的符文数为2:

package main

import "fmt"
import "unicode/utf8"

func main() {
    fmt.Println("Hello, 世界", len("世界"), utf8.RuneCountInString("世界"))
}

使用该包及其Iter类型,“字符”的实际数量将为:

package main

import "fmt"
import "golang.org/x/text/unicode/norm"

func main() {
    var ia norm.Iter
    ia.InitString(norm.NFKD, "école")
    nc := 0
    for !ia.Done() {
        nc = nc + 1
        ia.Next()
    }
    fmt.Printf("Number of chars: %d\n", nc)
}

在这里,它使用Unicode规范化格式 NFKD“Compatibility Decomposition”

用户回答回答于

有一种方法可以通过将字符串转换为[]rune来获得没有任何包的runes计数len([]rune(YOUR_STRING)):

package main

import "fmt"

func main() {
    russian := "Спутник и погром"
    english := "Sputnik & pogrom"

    fmt.Println("count of bytes:",
        len(russian),
        len(english))

    fmt.Println("count of runes:",
        len([]rune(russian)),
        len([]rune(english)))

}

字节数30 16 符文数16 16

扫码关注云+社区