需要提取 Rust 字符串中的最后一个单词

Need to extract the last word in a Rust string

我正在用 Rust 对字符串进行一些处理,我需要能够从该字符串中提取最后一组字符。换句话说,给定如下字符串:

some|not|necessarily|long|name

我需要能够获取该字符串的最后一部分,即“name”,并将其放入另一个字符串或 &str,方式如下:

let last = call_some_function("some|not|necessarily|long|name");

所以 last 等于“name”。

有办法吗?是否有一个字符串函数可以轻松完成此操作?如果没有(在查看文档后,我怀疑是否存在),在 Rust 中如何做到这一点?

您可以使用 String::split() method, which will return an iterator over the substrings split by that separator, and then use the Iterator::last() 方法来 return 迭代器中的最后一个元素,如下所示:

let s = String::from("some|not|necessarily|long|name");
let last = s.split('|').last().unwrap();
    
assert_eq!(last, "name");

另请注意,字符串切片 (&str) 也实现了 split 方法,因此您 不需要 使用 std::String.

let s = "some|not|necessarily|long|name";
let last = s.split('|').last().unwrap();
    
assert_eq!(last, "name");

虽然@effect 的答案是正确的,但它不是最惯用也不是最高效的方法。它将遍历整个字符串并匹配所有 | 以到达最后一个。你可以做得更好,但有一种 str 的方法可以完全满足你的要求 - rsplit_once():

let (_, name) = s.rsplit_once('|').unwrap();
// Or
// let name = s.rsplit_once('|').unwrap().1;
//
// You can also use a multichar separator:
// let (_, name) = s.rsplit_once("|").unwrap();
// But in the case of a single character, a `char` type is likely to be more performant.

Playground.