在 Rust 中,在第一个空格上分割字符串一次

Nic*_*ert 2 string whitespace split rust

我有一个字符串,比如说"dog cat fish",我想将其在第一个空格上分割成两个片段,如下所示:("dog", "cat fish")
我尝试天真地使用split_once()这样的方法:

let string = "dog cat fish";
let (first_word, rest_of_string) = string.split_once(' ').unwrap();
Run Code Online (Sandbox Code Playgroud)

它对于常规空白字符有效。但是,我希望它也适用于其他类型的 Unicode 空白字符,就像\tsplit_whitespace()方法一样。
不过,我不想使用split_whitespace(),因为它返回一个迭代器,我必须在迭代后重新收集并加入单词,因为这会浪费时间:

let mut it = string.split_whitespace();
let first_word = it.next().unwrap();
let rest_of_string = it.collect::Vec<&str>().join(" ");
Run Code Online (Sandbox Code Playgroud)

那么,如果我有一个像 那样的字符串"dog \t cat fish",我该如何分割它以获得这两个切片("dog", "cat fish")
我也想过使用正则表达式,但是有更好的方法吗?

Dog*_*ert 10

您可以split_once使用一个调用 的函数char::is_whitespace(),但它只会在第一个空格上拆分。然后,您需要&str从头开始修剪第二个。

fn main() {
    let string = "dog \t cat fish";
    let (a, b) = string.split_once(char::is_whitespace).unwrap();
    let b = b.trim_start();
    dbg!(a, b);
}
Run Code Online (Sandbox Code Playgroud)

输出:

[src/main.rs:5] a = "dog"
[src/main.rs:5] b = "cat fish"
Run Code Online (Sandbox Code Playgroud)

操场