如何在 Rust 中拆分字符串,以便将连续的分隔符合并为一个?例如:
"1 2 3".splitX(" ")
Run Code Online (Sandbox Code Playgroud)
应该产生这个Vec:(["1", "2", "3"]当从 Split 对象或任何其他可能存在的中间对象收集时)。这个例子是针对空白的,但我们也应该能够将其扩展到其他分隔符。
我相信我们可以.filter()在使用后删除空项目.split(),但如果它可以.split()直接作为原始项目的一部分来完成,那就更干净了。我显然对此进行了彻底的搜索,并且很惊讶我在任何地方都找不到答案。
我知道对于空白我们已经有split_whitespace()and split_ascii_whitespace(),但我正在寻找适用于通用分隔符字符串的解决方案。
标准解决方案是split使用filter:
let output: Vec<&str> = input
.split(pattern)
.filter(|s| !s.is_empty())
.collect();
Run Code Online (Sandbox Code Playgroud)
这是快速且清晰的。
您还可以使用正则表达式来避免过滤步骤:
let output: Vec<&str> = regex::Regex::new(" +").unwrap()
.split(input)
.collect();
Run Code Online (Sandbox Code Playgroud)
如果它在一个将被多次调用的函数中,您可以使用lazy_regex避免重复Regex编译:
let output: Vec<&str> = lazy_regex::regex!(" +")
.split(input)
.collect();
Run Code Online (Sandbox Code Playgroud)