[rust] Rust에서 문자열을 어떻게 분할합니까?

로부터 문서 , 그것은 분명하지 않다. 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();


답변

세 가지 간단한 방법이 있습니다.

  1. 저자 분리기 :

    s.split("separator")  |  s.split('/')  |  s.split(char::is_numeric)
  2. 으로 공백 :

    s.split_whitespace()
  3. 바꿈으로 :

    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());


답변

splitstructString 에는 특별한 방법이 있습니다 .

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"]);


답변

splitusing : Iterator로 변환 할 수있는를 반환합니다 . 직접 반환하는 대신 반복자를 통과하면 몇 가지 장점이 있습니다.Veccollectsplit_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>예 : a LinkedList또는 a VecDeque또는 구현하는 사용자 정의 유형)을 사용할 수도 있습니다 FromIterator<&str>.

답변

또한있다 split_whitespace()

fn main() {
    let words: Vec<&str> = "   foo   bar\t\nbaz   ".split_whitespace().collect();
    println!("{:?}", words);
    // ["foo", "bar", "baz"] 
}


답변