如何在字符串中找到一个字符的最后一次出现?

15
我想要查找字符串中最后一个正斜杠/的索引位置。例如,我有字符串/test1/test2/test3,我想要找到test3前面的斜杠的位置。你该如何实现?
在Rust中,没有像Python中的rfind一样的函数。
2个回答

32

你需要使用std::str::rfind。请注意它返回一个Option<usize>,所以在检查其结果时需要考虑到这一点:

fn main() {
    let s = "/test1/test2/test3";
    let pos = s.rfind('/');

    println!("{:?}", pos); // prints "Some(12)"
}

4

@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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接