Курс по 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

Практика

Попълнете теста, който обхваща съдържанието на тази тема.

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

Стрингове / Ескейпване на специални символи   |   💪 Упражнения: Стрингове

Тази страница е автоматично преведена с ChatGPT 4.0. Оригинален текст на английски

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