로부터 문서 , 그것은 분명하지 않다. Java에서는 다음 split
과 같은 방법을 사용할 수 있습니다 .
"some string 123 ffd".split("123");
답변
사용하다 split()
let mut split = "some string 123 ffd".split("123");
반복자 (iterator)를 제공하여 반복하거나 collect()
벡터로 만들 수 있습니다 .
for s in split {
println!("{}", s)
}
let vec = split.collect::<Vec<&str>>();
// OR
let vec: Vec<&str> = split.collect();
답변
세 가지 간단한 방법이 있습니다.
-
저자 분리기 :
s.split("separator") | s.split('/') | s.split(char::is_numeric)
-
으로 공백 :
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
structString
에는 특별한 방법이 있습니다 .
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"]);
답변
split
using : 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
또는 aVecDeque
또는 구현하는 사용자 정의 유형)을 사용할 수도 있습니다FromIterator<&str>
.
답변
또한있다 split_whitespace()
fn main() {
let words: Vec<&str> = " foo bar\t\nbaz ".split_whitespace().collect();
println!("{:?}", words);
// ["foo", "bar", "baz"]
}