为什么我不能使用 `.iter()` 字符串切片?

Jae*_*bum 4 rust

为什么无法迭代字符串切片?

fn main() {
    let text = "abcd";
    for (i, c) in text.iter().enumerate() {
        // ...
    } 
}
Run Code Online (Sandbox Code Playgroud)

给出一个错误

fn main() {
    let text = "abcd";
    for (i, c) in text.iter().enumerate() {
        // ...
    } 
}
Run Code Online (Sandbox Code Playgroud)

如何使字符串切片可迭代?

kmd*_*eko 20

没有为;.iter()定义方法 str也许是因为它可能含糊不清。即使在您的问题中,也不清楚您到底想要迭代什么,字符还是字节

\n
    \n
  • .bytes()将产生原始 utf-8 编码字节
  • \n
  • .chars()将产生chars,它们是 unicode 标量值
  • \n
  • 或者可能.graphemes()来自unicode-segmentation为每个“用户感知的字符”生成子字符串的板条箱
  • \n
\n

每个都有很多用例,只需选择最合适的即可。操场

\n
use unicode_segmentation::UnicodeSegmentation; // 1.8.0\n\nfn main() {\n    let text = "\xe2\x80\x8d\xe2\x99\x82\xef\xb8\x8f"; // browser rendering may vary\n    println!("{}", text.bytes().count());         // 17\n    println!("{}", text.chars().count());         // 5\n    println!("{}", text.graphemes(true).count()); // 1\n}\n
Run Code Online (Sandbox Code Playgroud)\n