(最新的 Rust)中使用多个不同的可能的分割字符进行基本且有效的字符串分割(即转换)的最生锈/当前的方法是什么:
"name, age. location:city"
进入:
["name", "age", "location", "city"]
我知道我们可以使用正则表达式来执行此操作,但此代码将用于日志处理,并且在受 cpu/内存限制的计算机上使用,因此如果可能的话,我宁愿避免使用正则表达式。
str::split
接受通用拆分 Pattern
,它可以是各种不同事物之一。特别是,它可以是一个决定字符是否为分隔符的闭包,从而使我们能够完全控制,同时允许我们利用 char
中的辅助函数。
let value = "name, age. location:city";
let parts: Vec<_> = value
.split(|c: char| c.is_ascii_punctuation() || c.is_ascii_whitespace())
.filter(|p| !p.is_empty())
.collect();
assert_eq!(&parts[..], &["name", "age", "location", "city"]);
另请参阅:如何在 Rust 中拆分字符串?
这将使用您选择的任何一组字符进行拆分并返回一个字符串数组。
let items = value
.split(&[' ', ',', ':', '-'])
.filter(|&r| r != "")
.map(|r| r.to_string() )
.collect();
或者,对于常规字符串:
let items = value
.split(&[' ', ',', ':', '-', '\t'])
.filter(|&r| r != "").collect()