获取Rust中字符串的字符串长度

时间:2017-09-19 01:58:56

标签: rust

基于Rust bookString::len方法返回组成字符串的字节数,这可能与字符长度不对应。

例如,如果我们在日语中考虑以下字符串,len()将返回30,这是字节数而不是字符数,这将是10:

let s = String::from("ラウトは難しいです!");
s.len() // returns 30.

我找到获取字符数的唯一方法是使用以下函数:

s.chars().count()

返回10,是正确的字符数。

String上是否有任何方法可以返回字符数,除了我上面使用的那个?

1 个答案:

答案 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
}