如何在Rust中分割字符串?目前尚不清楚,從its documentation。在Java中我會做到這一點的:如何在Rust中拆分字符串?
"some string 123 ffd".split("123");
如何在Rust中分割字符串?目前尚不清楚,從its documentation。在Java中我會做到這一點的:如何在Rust中拆分字符串?
"some string 123 ffd".split("123");
使用split()
let mut split = "some string 123 ffd".split("123");
這給出了一個迭代器,你可以遍歷或collect()
到載體中。
for s in split {
println!("{}", s)
}
let vec = split.collect::<Vec<&str>>();
// OR
let vec: Vec<&str> = split.collect();
你也可以寫成'.collect ::
我如何得到結果的長度 - 「讓分裂」? 'split.len()'不存在。 – 2014-10-30 14:00:38
@AlexanderSupertramp使用'.count()'。 'len()'僅適用於知道它們的確切大小而不需要消耗的迭代器,'count()'消耗迭代器。 – Manishearth 2014-10-30 18:16:11
有一種特殊的方法split
for struct String
:
fn split<'a, P>(&'a self, pat: P) -> Split<'a, P> where P: Pattern<'a>
分割成炭:
let v: Vec<&str> = "Mary had a little lamb".split(' ').collect();
assert_eq!(v, ["Mary", "had", "a", "little", "lamb"]);
通過分割字符串:
let v: Vec<&str> = "lion::tiger::leopard".split("::").collect();
assert_eq!(v, ["lion", "tiger", "leopard"]);
斯普利特關閉:
let v: Vec<&str> = "abc1def2ghi".split(|c: char| c.is_numeric()).collect();
assert_eq!(v, ["abc", "def", "ghi"]);
fn main() {
let words: Vec<&str> = " foo bar\t\nbaz ".split_whitespace().collect();
println!("{:?}", words);
// ["foo", "bar", "baz"]
}
有三種簡單的方法:
通過分離:
s.split("separator")
通過空白:
s.split_whitespace()
通過換行符:
s.lines()
每一種的結果是一個迭代器:
let text = "foo\r\nbar\n\nbaz\n";
let mut lines = text.lines();
assert_eq!(Some("foo"), lines.next());
assert_eq!(Some("bar"), lines.next());
assert_eq!(Some(""), lines.next());
assert_eq!(Some("baz"), lines.next());
assert_eq!(None, lines.next());
split
返回Iterator
,你可以轉換我nto a Vec
using collect
:split_line.collect::<Vec<_>>()
。直接通過迭代器而不是直接返回Vec
有幾個優點:
split
是懶惰的。這意味着它不會真正分割線路直到你需要它。這樣,如果您只需要前幾個值,則不會浪費時間分割整個字符串:split_line.take(2).collect::<Vec<_>>()
,或者即使您只需要第一個可以轉換爲整數的值:split_line.filter_map(|x| x.parse::<i32>().ok()).next()
。最後一個示例不會浪費時間來嘗試處理「23.0」,但一旦找到「1」就會立即停止處理。split
對您想要存儲結果的方式沒有任何假設。您可以使用Vec
,但您也可以使用任何實施FromIterator<&str>
的項目,例如LinkedList
或VecDeque
或實施FromIterator<&str>
的任何自定義類型。
https://doc.rust-lang.org/std/string/struct.String.html – 2016-10-29 02:10:16
@bow有沒有辦法使它成爲一個字符串數組而不是矢量? – Greg 2017-11-07 07:25:37
我不知道有任何方法可以做到這一點,至少是直接的。您可能需要手動迭代「Split」並將其設置到數組中。當然,這意味着每個分割中的項目數量必須相同,因爲數組的大小是固定的,您必須先定義數組。我想這可能比簡單創建一個'Vec'更麻煩。 – bow 2017-11-07 07:37:08