小智 15
虽然比我想要的更复杂,但另一个解决方案是使用Chars迭代器及其position()功能:
"Program".chars().position(|c| c == 'g').unwrap()
Run Code Online (Sandbox Code Playgroud)
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"
Run Code Online (Sandbox Code Playgroud)
这不起作用:
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 "?"
Run Code Online (Sandbox Code Playgroud)
您正在寻找findString 的方法。要查找'g'in 的索引,"Program"您可以执行
"Program".find('g')
Run Code Online (Sandbox Code Playgroud)
找到文件。