Метод char_indices
Метод char_indices возвращает итератор,
который выдаёт пары значений: позицию символа
в байтах и сам символ. Параметров метод не
принимает. Это удобно, когда нужно обойти строку
по символам и одновременно знать, где именно
расположен каждый символ внутри строки.
Обратите внимание: индекс в методе char_indices
измеряется в байтах, а не в символах. Для ASCII-строк
эти значения совпадают, но для кириллицы или эмодзи
один символ может занимать несколько байт.
Синтаксис
str.char_indices()
Пример
Давайте обойдём строку "abcde" и выведем
каждую пару индекс-символ:
fn main()
{
let s = "abcde";
for (index, ch) in s.char_indices() {
println!("{}: {}", index, ch);
}
}
Результат выполнения кода:
0: a
1: b
2: c
3: d
4: e
Пример
Давайте соберём все пары индекс-символ в вектор
с помощью метода collect:
fn main()
{
let s = "abcde";
let res: Vec<(usize, char)> = s.char_indices().collect();
println!("{:?}", res);
}
Результат выполнения кода:
[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd'), (4, 'e')]
Пример
Давайте посмотрим, как меняются индексы, когда
строка содержит многобайтовые символы. Возьмём
строку "абв", где каждая буква занимает
два байта:
fn main()
{
let s = "абв";
for (index, ch) in s.char_indices() {
println!("{}: {}", index, ch);
}
}
Результат выполнения кода:
0: а
2: б
4: в
Смотрите также
-
метод
chars,
который возвращает итератор только по символам строки -
метод
bytes,
который возвращает итератор по байтам строки -
метод
match_indices,
который возвращает позиции вхождений подстроки -
метод
len,
который возвращает длину строки в байтах