Подтвердить что ты не робот

Как разбить строку в Rust?

Как расколоть строку в Rust? Из его документации не понятно. В Java я бы сделал это:

"some string 123 ffd".split("123");
4b9b3361

Ответ 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"] 
}