基于Rust book,String::len
方法返回组成字符串的字节数,这可能与字符长度不对应。
例如,如果我们在日语中考虑以下字符串,len()
将返回30,这是字节数而不是字符数,这将是10:
let s = String::from("ラウトは難しいです!");
s.len() // returns 30.
我找到获取字符数的唯一方法是使用以下函数:
s.chars().count()
返回10,是正确的字符数。
String
上是否有任何方法可以返回字符数,除了我上面使用的那个?
答案 0 :(得分:15)
String
上是否有任何方法可以返回字符数,除了我上面使用的那个?
没有。使用s.chars().count()
是正确的。请注意,这是一个O(N)操作(因为UTF-8很复杂),而获取字节数是一个O(1)操作。
您可以自己查看all the methods on str
。
正如评论中所指出的,char
是一个具体的概念:
重要的是要记住
char
表示Unicode标量值,并且可能与您对“字符”的概念不符。对字形集群的迭代可能就是你真正想要的。
一个这样的例子是预先组合的字符:
fn main() {
println!("{}", "é".chars().count()); // 2
println!("{}", "é".chars().count()); // 1
}