本文簡要介紹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 str.split_terminator用法及代碼示例
- Rust str.split_once用法及代碼示例
- Rust str.split_inclusive用法及代碼示例
- Rust str.splitn用法及代碼示例
- Rust str.split_whitespace用法及代碼示例
- Rust str.split_at_mut用法及代碼示例
- Rust str.split_ascii_whitespace用法及代碼示例
- Rust str.split_at用法及代碼示例
- Rust str.strip_suffix用法及代碼示例
- Rust str.starts_with用法及代碼示例
- Rust str.strip_prefix用法及代碼示例
- Rust str.slice_unchecked用法及代碼示例
- Rust str.make_ascii_uppercase用法及代碼示例
- Rust str.trim_left用法及代碼示例
- Rust str.char_indices用法及代碼示例
- Rust str.to_ascii_lowercase用法及代碼示例
- Rust str.trim用法及代碼示例
- Rust str.to_uppercase用法及代碼示例
- Rust str.escape_default用法及代碼示例
- Rust str.rmatches用法及代碼示例
- Rust str.trim_right用法及代碼示例
- Rust str.rsplit_terminator用法及代碼示例
- Rust str.rsplit_once用法及代碼示例
- Rust str.len用法及代碼示例
- Rust str.chars用法及代碼示例
注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 str.split。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。