Как разбить строку в Rust? Как расколоть строку в Rust? Из его документации не понятно. В Java я бы сделал это: "some string 123 ffd".split("123"); Ответ 1 Используйте 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(); Ответ 2 Существует специальный метод split для struct String: 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"]); Ответ 3 Существует три простых способа: Под разделителем: 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()); Ответ 4 Там также split_whitespace() fn main() { let words: Vec<&str> = " foo bar\t\nbaz ".split_whitespace().collect(); println!("{:?}", words); // ["foo", "bar", "baz"] }
Ответ 1 Используйте 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();
Ответ 2 Существует специальный метод split для struct String: 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"]);
Ответ 3 Существует три простых способа: Под разделителем: 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());
Ответ 4 Там также split_whitespace() fn main() { let words: Vec<&str> = " foo bar\t\nbaz ".split_whitespace().collect(); println!("{:?}", words); // ["foo", "bar", "baz"] }