当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Rust str.split用法及代码示例


本文简要介绍rust语言中 str.split 的用法。

用法

pub fn split<'a, P>(&'a self, pat: P) -> Split<'a, P> where    P: Pattern<'a>,

此字符串切片的子字符串的迭代器,由模式匹配的字符分隔。

pattern 可以是 &str char char 的切片,或者确定字符是否匹配的函数或闭包。

迭代器行为

如果模式允许反向搜索并且正向/反向搜索产生相同的元素,则返回的迭代器将是 DoubleEndedIterator 。这适用于例如 char ,但不适用于 &str

如果该模式允许反向搜索但其结果可能与正向搜索不同,则可以使用 rsplit 方法。

例子

简单模式:

let v: Vec<&str> = "Mary had a little lamb".split(' ').collect();
assert_eq!(v, ["Mary", "had", "a", "little", "lamb"]);

let v: Vec<&str> = "".split('X').collect();
assert_eq!(v, [""]);

let v: Vec<&str> = "lionXXtigerXleopard".split('X').collect();
assert_eq!(v, ["lion", "", "tiger", "leopard"]);

let v: Vec<&str> = "lion::tiger::leopard".split("::").collect();
assert_eq!(v, ["lion", "tiger", "leopard"]);

let v: Vec<&str> = "abc1def2ghi".split(char::is_numeric).collect();
assert_eq!(v, ["abc", "def", "ghi"]);

let v: Vec<&str> = "lionXtigerXleopard".split(char::is_uppercase).collect();
assert_eq!(v, ["lion", "tiger", "leopard"]);

如果模式是字符切片,则在每次出现任何字符时拆分:

let v: Vec<&str> = "2020-11-03 23:59".split(&['-', ' ', ':', '@'][..]).collect();
assert_eq!(v, ["2020", "11", "03", "23", "59"]);

更复杂的模式,使用闭包:

let v: Vec<&str> = "abc1defXghi".split(|c| c == '1' || c == 'X').collect();
assert_eq!(v, ["abc", "def", "ghi"]);

如果一个字符串包含多个连续的分隔符,您将在输出中得到空字符串:

let x = "||||a||b|c".to_string();
let d: Vec<_> = x.split('|').collect();

assert_eq!(d, &["", "", "", "", "a", "", "b", "c"]);

连续的分隔符由空字符串分隔。

let x = "(///)".to_string();
let d: Vec<_> = x.split('/').collect();

assert_eq!(d, &["(", "", "", ")"]);

字符串开头或结尾的分隔符与空字符串相邻。

let d: Vec<_> = "010".split("0").collect();
assert_eq!(d, &["", "1", ""]);

当空字符串用作分隔符时,它将字符串中的每个字符以及字符串的开头和结尾分开。

let f: Vec<_> = "rust".split("").collect();
assert_eq!(f, &["", "r", "u", "s", "t", ""]);

当使用空格作为分隔符时,连续的分隔符可能会导致令人惊讶的行为。这段代码是正确的:

let x = "    a  b c".to_string();
let d: Vec<_> = x.split(' ').collect();

assert_eq!(d, &["", "", "", "", "a", "", "b", "c"]);

它没有给你:

assert_eq!(d, &["a", "b", "c"]);

对此行为使用 split_whitespace

相关用法


注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 str.split。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。