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