Курс языка программирования 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 и комбинирующий символ 0x0328. Поэтому здесь все еще один символ, но две кодовые позиции. Программа выводит:

1
2

Практика

Пройдите викторину, которая охватывает содержание этой темы.

Навигация по курсу

Строки / Экранирование специальных символов   |   💪 Упражнения: Строки

Эта страница переведена с английского человеком. Оригинальный текст на английском языке. О переводе.

Переводы этой страницы: EnglishDeutschEspañolItalianoLatviešuNederlandsБългарскиРусскийУкраїнська