繁体   English   中英

如何找到 Rust 中字符串中字符的索引?

[英]How can I find the index of a character in a string in Rust?

我有一个值为“Program”的字符串,我想在该字符串中找到字符“g”的索引。

虽然比我想要的更复杂,但另一个解决方案是使用Chars迭代器及其position()函数:

"Program".chars().position(|c| c == 'g').unwrap()

在接受的解决方案中使用的find返回字节偏移量 ,而不一定是字符的索引。 它适用于基本的ASCII字符串,例如问题中的字符串,并且当与多字节Unicode字符串一起使用时它将返回一个值,将结果值视为字符索引会导致问题。

这有效:

let my_string = "Program";
let g_index = my_string.find("g");   // 3
let g: String = my_string.chars().skip(g_index).take(1).collect();
assert_eq!("g", g);   // g is "g"

这不起作用:

let my_string = "プログラマーズ";
let g_index = my_string.find("グ");    // 6
let g: String = my_string.chars().skip(g_index).take(1).collect();
assert_eq!("グ", g);    // g is "ズ"

您正在寻找String的find方法。 要在"Program"找到'g'的索引,你可以这样做

"Program".find('g')

发现的文件

如果您的单词有几个g ,您可以使用enumerate来查找所有索引:

"ඞggregate"
    .chars()
    .enumerate()
    .filter(|(_, c)| *c == 'g')
    .map(|(i, _)| i)
    .collect::<Vec<_>>();  // [1, 2, 5]

如果字符串仅包含 ASCII 字符:

"aggregate"
    .bytes()
    .enumerate()
    .filter(|(_, b)| *b == b'g')
    .map(|(i, _)| i)
    .collect::<Vec<_>>();  // [1, 2, 5]

操场

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM