Курс по 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
Навигация по курса
← Стрингове / Ескейпване на специални символи | 💪 Упражнения: Стрингове →
Тази страница е автоматично преведена с ChatGPT 4.0. Оригинален текст на английски
Преводи на тази страница: English • Deutsch • Español • Italiano • Latviešu • Nederlands • Български • Русский • Українська