How to split a string in Rust?

How to split a string in Rust? From its documentation is not clear. In Java, I would do this:

"some string 123 ffd".split("123"); 
+45
rust
30 Oct '14 at 1:45
source share
4 answers

Use split()

 let mut split = "some string 123 ffd".split("123"); 

This gives an iterator that you can iterate over, or collect() into a vector.

 for s in split { println!("{}", s) } let vec = split.collect::<Vec<&str>>(); // OR let vec: Vec<&str> = split.collect(); 
+61
Oct 30 '14 at 2:00
source share

There is a special split method for struct String :

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

Divide by char:

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

Divide by line:

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

Divide by short circuit:

 let v: Vec<&str> = "abc1def2ghi".split(|c: char| c.is_numeric()).collect(); assert_eq!(v, ["abc", "def", "ghi"]); 
+12
May 6 '15 at 19:57
source share

There are three easy ways:

  • Under the separator :

     s.split("separator") 
  • To spaces :

     s.split_whitespace() 
  • Under the news :

     s.lines() 

The result of each view is an iterator:

 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()); 
+10
Jul 01 '16 at 6:59
source share

There is also split_whitespace()

 fn main() { let words: Vec<&str> = " foo bar\t\nbaz ".split_whitespace().collect(); println!("{:?}", words); // ["foo", "bar", "baz"] } 
+4
Apr 27 '16 at 3:41 on
source share



All Articles