基于Rust book,String::len
方法返回组成字符串的字节数,这可能与字符长度不对应。
例如,如果我们考虑以下日语字符串,len()
将返回30,这是字节数而不是字符数,字符数将是10:
let s = String::from("ラウトは難しいです!");
s.len() // returns 30.
我发现获得字符数的唯一方法是使用以下函数:
s.chars().count()
返回10,是正确的字符数。
除了我上面使用的方法之外,String
上还有其他方法可以返回字符数吗?
1条答案
按热度按时间vddsk6oq1#
除了我上面使用的方法之外,
String
上还有其他方法可以返回字符数吗?不可以。使用
s.chars().count()
是正确的。请注意,这是一个O(N)操作(因为UTF-8是复杂的),而获取字节数是一个O(1)操作。您可以亲自查看all the methods on
str
。正如评论中所指出的,
char
是一个特定的概念:记住
char
表示Unicode标量值是很重要的,它可能与您对“字符”的概念不匹配。在字素簇上迭代可能是您实际想要的。一个这样的例子是使用预组合字符:
您可能更愿意使用unicode-segmentation机箱中的
graphemes
: