我有一个字符串,比如
"dog cat fish"
,我想将其在第一个空白处分成两个片段,如下所示:("dog", "cat fish")
。split_once()
方法:
let string = "dog cat fish";
let (first_word, rest_of_string) = string.split_once(' ').unwrap();
它对于常规空白字符有效。但是,我希望它也适用于其他类型的 Unicode 空白字符,例如
\t
,就像 split_whitespace()
方法一样。split_whitespace()
,因为它返回一个迭代器,我必须在迭代后重新收集并加入单词,因为这会浪费时间:
let it = string.split_whitespace();
let first_word = it.next().unwrap();
let rest_of_string = it.collect::Vec<&str>().join(" ");
那么,如果我有一个像
"dog \t cat fish"
这样的字符串,我该如何分割它以获得这两个切片 ("dog", "cat fish")
?您可以使用调用
split_once
的函数来 char::is_whitespace()
,但这只会在第一个空白处进行分割。然后,您需要从头开始修剪第二个&str
。
fn main() {
let string = "dog \t cat fish";
let (a, b) = string.split_once(|ch: char| ch.is_whitespace()).unwrap();
let b = b.trim_start();
dbg!(a, b);
}
输出:
[src/main.rs:5] a = "dog"
[src/main.rs:5] b = "cat fish"