Как разделить строку в ржавчине?
С документация, это не понятно. В Java вы можете использовать split метод вот так:
"some string 123 ffd".split("123");
5 ответов:
использовать
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();
есть специальный метод
splitдля structString:fn split<'a, P>(&'a self, pat: P) -> Split<'a, P> where P: Pattern<'a>разделить на char:
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"]);
есть три простых способа:
By разделитель:
s.split("separator")By пробел:
s.split_whitespace()By строки:
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, который можно преобразовать вVecиспользуя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>, например aLinkedListилиVecDeque, или любой пользовательский тип, который реализуетFromIterator<&str>.
там же
split_whitespace()fn main() { let words: Vec<&str> = " foo bar\t\nbaz ".split_whitespace().collect(); println!("{:?}", words); // ["foo", "bar", "baz"] }