Курс языка программирования 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Практика
Пройдите 1 тест по содержанию этой темы.
Навигация по курсу
← Тест: Обратный слэш в выводе | Тест: Длина фразы →
💪 Или перейдите сразу к упражнениям этого
раздела.