6

I am trying to split a string in Rust using both whitespace and ,. I tried doing

let v: Vec<&str> = "Mary had a little lamb".split_whitespace().collect(); let c: Vec<&str> = v.split(',').collect(); 

The result:

error[E0277]: the trait bound `for<'r> char: std::ops::FnMut<(&'r &str,)>` is not satisfied --> src/main.rs:3:26 | 3 | let c: Vec<&str> = v.split(',').collect(); | ^^^^^ the trait `for<'r> std::ops::FnMut<(&'r &str,)>` is not implemented for `char` error[E0599]: no method named `collect` found for type `std::slice::Split<'_, &str, char>` in the current scope --> src/main.rs:3:37 | 3 | let c: Vec<&str> = v.split(',').collect(); | ^^^^^^^ | = note: the method `collect` exists but the following trait bounds were not satisfied: `std::slice::Split<'_, &str, char> : std::iter::Iterator` `&mut std::slice::Split<'_, &str, char> : std::iter::Iterator` 
1

2 Answers 2

11

Use a closure:

let v: Vec<&str> = "Mary had a little lamb." .split(|c| c == ',' || c == ' ') .collect(); 

This is based upon the String documentation.

Sign up to request clarification or add additional context in comments.

Comments

6

Pass a slice with the chars to it:

fn main() { let s = "1,2 3"; let v: Vec<_> = s.split([' ', ','].as_ref()).collect(); assert_eq!(v, ["1", "2", "3"]); } 

split takes an argument of type Pattern. To see what concretely you can pass as parameter, see the implementors

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.