我想要查找字符串中最后一个正斜杠
在Rust中,没有像Python中的
/
的索引位置。例如,我有字符串/test1/test2/test3
,我想要找到test3
前面的斜杠的位置。你该如何实现?在Rust中,没有像Python中的
rfind
一样的函数。你需要使用std::str::rfind
。请注意它返回一个Option<usize>
,所以在检查其结果时需要考虑到这一点:
fn main() {
let s = "/test1/test2/test3";
let pos = s.rfind('/');
println!("{:?}", pos); // prints "Some(12)"
}
@ljedrz 的解决方案如果字符串包含非ASCII字符,将无法给出正确结果。
以下是一个速度较慢的解决方案,但总能给出正确的答案:
let s = "/test1/test2/test3";
let pos = s.chars().count() - s.chars().rev().position(|c| c == '/').unwrap() - 1;
或者你可以将它作为一个函数使用:
fn rfind_utf8(s: &str, chr: char) -> Option<usize> {
if let Some(rev_pos) = s.chars().rev().position(|c| c == chr) {
Some(s.chars().count() - rev_pos - 1)
} else {
None
}
}
rfind
函数返回的结果是正确的,它只会返回字符串中字符的 _字节位置_,而不是其作为 Unicode 标量值的位置。 - E net4