Свойство runes
Свойство runes возвращает объект типа Runes,
который представляет собой итерируемую коллекцию
кодовых точек Unicode (рун) данной строки. В отличие
от свойства codeUnits, которое возвращает
16-битные кодовые единицы, свойство runes
корректно обрабатывает символы, выходящие за пределы
BMP (Basic Multilingual Plane), например, эмодзи
или редкие иероглифы. Сама строка при этом
не изменяется.
Синтаксис
str.runes
Пример
Давайте получим руны строки из латинских букв и выведем их в виде списка:
void main()
{
String str = 'abcde';
Iterable<int> res = str.runes;
print(res.toList());
}
Результат выполнения кода:
[97, 98, 99, 100, 101]
Пример
Давайте получим руны строки из цифр:
void main()
{
String str = '12345';
Iterable<int> res = str.runes;
print(res.toList());
}
Результат выполнения кода:
[49, 50, 51, 52, 53]
Пример
Давайте убедимся, что свойство runes
корректно обрабатывает символы за пределами BMP.
Символ эмодзи "😀" имеет кодовую точку 128512,
которая не помещается в одну 16-битную единицу:
void main()
{
String str = '😀';
print(str.runes.toList());
print(str.codeUnits);
}
Результат выполнения кода:
[128512]
[55357, 56832]
Пример
Давайте переберём руны строки в цикле и выведем каждую из них:
void main()
{
String str = 'abcde';
for (int rune in str.runes) {
print(rune);
}
}
Результат выполнения кода:
97
98
99
100
101
Смотрите также
-
свойство
codeUnits,
которое возвращает кодовые единицы строки -
класс
Runes,
который представляет коллекцию рун -
класс
RuneIterator,
который перебирает руны строки -
метод
fromCharCodes,
который создаёт строку из кодовых точек