Курс языка программирования Raku / Основы / Строки
Длина строки
Природа Юникода в строках делает кое-какие тривиальные вещи несколько более сложными. По крайней мере, вам следует думать об этом, как о чем-то не самом простом. Возьмем, для примера, длину строки. Это количество букв, или количество байтов? Или что если один и тот же символ можно разложить по-разному в разных строках, это все еще один символ?
Длина в символах
Чтобы получить длину строки в символах, используйте метод chars
:
my $str = '你好世界';
say $str.chars;
И хотя мы поговорим о методах позже, вы уже должны уметь их использовать. В Raku
вы можете вызвать метод почти для любого объекта, включая строки и скалярные
переменные. Чтобы вызвать метод, используйте точку. Здесь мы видим метод,
вызванный для переменной, в которой хранится строка: $str.chars
.
В этом китайском приветствии четыре символа 你好世界. И $str.chars
вернет
ровно 4
.
Длина в байтах
Только для ссылки, вот как можно получить длину строки в байтах. В этом случае важно знать, какая кодировка была использована для хранения строки:
my $str = '你好世界';
say $str.encode('UTF-8').bytes;
В этот раз программа напишет 12
. Отметим, что на второй строке мы вызываем два
метода в цепочке друг за другом.
Длина в кодовых позициях
И для полноты картины, вот еще один полезный метод, который тоже относится к
длине строки: codes
. Он возвращает количество кодовых позиций в строке после
ее нормализации. В большинстве случаев методы codes
и chars
вернут одно и то
же значение. Но в некоторых редких случаях, когда, например, вы склеили
“несуществующий” символ, для которого нет ни одной кодовой позиции во всем
пространстве Юникода, методы вернут разные значения.
say 'x̨'.chars;
say 'x̨'.codes;
Буква x̨
не имеет отдельной кодовой позиции и может быть только составлена из
частей: строчная буква x
и комбинирующий символ 0x0328
. Поэтому здесь все
еще один символ, но две кодовые позиции. Программа выводит:
1
2
Навигация по курсу
← Строки / Экранирование специальных символов | 💪 Упражнения: Строки →
Эта страница переведена с английского человеком. Оригинальный текст на английском языке. О переводе.
Переводы этой страницы: English • Deutsch • Español • Italiano • Latviešu • Nederlands • Български • Русский • Українська