[英]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 "ズ"
如果您的单词有几个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.