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

问题描述 投票:0回答:1

我有一个字符串,比如

"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")

我也想过用正则表达式,但是有更好的方法吗?
我正在寻找一种有效且可能惯用的方法。预先感谢。

string rust split whitespace
1个回答
0
投票

您可以使用调用

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"
© www.soinside.com 2019 - 2024. All rights reserved.