Получить индексы всех вхождений подстроки в строке - PullRequest
1 голос
/ 03 мая 2020

Если бы я хотел получить индекс вхождения first , скажем, подстроки "foo" в строке "foo bar foo baz foo", я бы использовал:

fn main() {
    let my_string = String::from("foo bar foo baz foo");
    println!("{:?}", my_string.find("foo"));
}

. ... который дал бы мне Some(0).

Однако мне нужно найти индексы всех вхождений подстроки в строке. В этом сценарии мне нужно что-то вроде:

[0, 8, 16]

Как я могу сделать это идиоматически в Rust?

Ответы [ 2 ]

6 голосов
/ 03 мая 2020

Использовать match_indices . Пример из документов Rust:

let v: Vec<_> = "abcXXXabcYYYabc".match_indices("abc").collect();
assert_eq!(v, [(0, "abc"), (6, "abc"), (12, "abc")]);

let v: Vec<_> = "1abcabc2".match_indices("abc").collect();
assert_eq!(v, [(1, "abc"), (4, "abc")]);

let v: Vec<_> = "ababa".match_indices("aba").collect();
assert_eq!(v, [(0, "aba")]); // only the first `aba`
1 голос
/ 03 мая 2020

Существует match_indices: https://doc.rust-lang.org/std/string/struct.String.html#method .match_indices

let v: Vec<_> = "abcXXXabcYYYabc".match_indices("abc").collect();
assert_eq!(v, [(0, "abc"), (6, "abc"), (12, "abc")]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...