需要提取 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.
我正在用 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.