Фрагмент от лекция с ментор като част от курса на Codegym University. Запишете се за пълния курс.


„Поздрави, Амиго. Имало едно време научи, че за да напишеш низ от знаци в code, трябва да ги поставиш в двойни кавички.“

„Да, и това ни дава низов литерал . Не беше много отдавна, когато разбрах за това.“

„В нашата професия това беше много отдавна. Но сега не е това въпросът. Вместо това, моля, кажете ми Howво да направя, ако имаме нужда от кавички в низов литерал?“

"Хм... Низ, съдържащ кавички - Howво по-лесно. Сигурен съм, че има няHowъв начин..."

"Да. Да кажем, че искаме да покажем текста "Friends" was nominated for an "Oscar". Как бихме го направor?"

"Честно казано, нямам представа. Не мога да се сетя за нищо."

„Няма да можете да стигнете до решение чрез логика. Нека просто ви покажа Howво да правите.

Код Бележки
String s = ""Friends" was nominated for an "Oscar"";
Тази опция няма да работи!"

„Тази опция няма да работи, защото компилаторът интерпретира това като напълно различен code:

Код Бележки
String s = ""Friends" was nominated for an "Oscar"";
Тази опция няма да работи!"

"След като компилаторът срещне двойни кавички в codeа, той третира това, което следва, като начало на низов литерал. Следващата двойна кавичка показва края на низовия литерал."

„И така, How се записват двойни кавички вътре в литерал?“

„Има начин. Нарича се екраниране на знаци . Просто пишете кавичките в текстовия низ. И преди кавичките добавяте символа \ ( обратна наклонена черта).

„Ето How изглежда низовият литерал, когато е написан правилно:

Код Бележки
String s = "\"Friends\" was nominated for an \"Oscar\"";
Това ще свърши работа!

„Компилаторът ще интерпретира всичко правилно и няма да счита кавичките след обратната наклонена черта за нормални кавички.

Нещо повече, ако изведете този низ на екрана, кавичките с обратни наклонени черти ще бъдат обработени правилно и текстът ще се покаже без обратно наклонени черти:"Friends" was nominated for an "Oscar"

„Е, няма да кажа, че това е супер удобно...“

„Но Howво можете да направите, това са правилата. Друг важен момент. Кавичките, предшествани от обратна наклонена черта, представляват един знак: ние просто използваме гладка нотация, която не пречи на способността на компилатора да разпознава низови литерали в нашия Можете да присвоите кавички на charпроменлива:

Код Бележки
char c = '\"';
\"е един знак, а не два
char c = '"';
Това също е възможно: двойна кавичка в единични кавички

Често срещани ситуации, които възникват при екраниране на знаци

„В допълнение към двойните кавички, има много други символи, които компилаторът обработва по специален начин. Например прекъсване на ред.

"Как да добавим нов ред към литерал? Има и специална комбинация за това:

\n
Символ за прекъсване на реда

„Ако трябва да добавите нов ред към низов литерал, просто добавяте няколко знака“ \n.

Пример:

Код Конзолен изход
System.out.println("Best regards, \n Anonymous");
Best regards,
Anonymous

„Има общо 8 специални комбинации като тази, които също се наричат ​​escape-последователности . Ето ги:

Код Описание
\t Вмъкване на табулатор
\b Вмъкнете знак за връщане назад
\n Вмъкване на знак за нов ред
\r Вмъкнете знак за връщане на каретка
\f Вмъкнете символ за подаване на page
\' Поставете единична кавичка
\" Поставете двойна кавичка
\\ Поставете обратна наклонена черта

„Вече ми показа две от тях. Какво означават останалите 6?“

„Ще обясня всичко веднага.

\tе табулатор

Когато този текст се появи в текст, това е еквивалентно на натискане на Tabклавиша, докато пишете. Той измества текста, който го следва, и прави възможно подравняването на текста.

Пример:

Код Конзолен изход
System.out.println("0\t1\t2\t3");
System.out.println("0\t10\t20\t30");
System.out.println("0\t100\t200\t300");
0       1        2        3
0       10       20       30
0       100      200      300

\bозначава „връщане един знак назад“

Тази последователност в низ е еквивалентна на натискане Backspaceна клавиша на клавиатурата. Той премахва знака, който го предхожда:

Код Конзолен изход
System.out.println("Hello\b\b World");
Hel World

\rе знакът за връщане на каретката

Този символ премества курсора в началото на текущия ред, без да променя текста (зависи от versionта на JDK). Каквото и да се покаже след това, ще презапише съществуващия низ.

Пример:

Код Конзолен изход
System.out.println("Greetings\r World!");
World!ngs

\fе знак за емисия на страници

Този символ идва до нас от дните на първите матрични принтери. Извеждането на тази последователност на принтер би накарало принтерът просто да изведе текущия лист, без да отпечатва ниHowъв текст, докато започне нова page.

Сега бихме го нарекли прекъсване на page or нова page .

\\е обратна наклонена черта

Тук всичко е просто. Ако използваме обратна наклонена черта, за да екранираме знаци в нашия текст, тогава How да напишем самата обратна наклонена черта в низа?

Просто е: добавете обратна наклонена черта към текста — трябва да напишете две подред.

Пример:

Код Конзолен изход
System.out.println("c:\projects\my\first");
Компилаторът ще ви крещи за неизвестни екранирани знаци.
System.out.println("c:\\projects\\my\\first");
Така се прави правилно!

„Използването на двойни наклонени черти има смисъл. Но не успях веднага да запомня всичко останало. Ще трябва да разчитам на вашите съвети.“

„Постепенно ще запомните Howво ви трябва. Не се притеснявайте. А за всичко останало има Google.

Unicode codeиране

„Вече знаете, че всеки знак, показан на екрана, съответства на конкретен цифров code. Стандартизиран набор от тези codeове се нарича codeиране .

„Някога, когато компютрите бяха изобретени наскоро, седем бита (по-малко от един byte) бяха достатъчни, за да codeират всеки знак. Първото codeиране съдържаше само 128 знака. Това codeиране се наричаше ASCII .

— Това е странно име.

„Няма нищо странно в това. Това е съкращение. ASCII означава американски standardн code за обмен на информация – стандартна американска codeова table за печатни знаци и някои специални codeове.“

„Състои се от 33 непечатаеми контролни знака (които влияят върху начина, по който се обработват текст и интервали) и 95 печатни знака, включително цифри, главни и малки латински букви и няколко препинателни знаци.

„С нарастването на популярността на компютрите, всяка страна започна да пуска свое собствено codeиране. Обикновено те приемаха ASCII като отправна точка и заменяха рядко използваните ASCII символи със символи от съответните им азбуки.

„С течение на времето се появи една идея: да се създаде единно codeиране, което съдържа всички символи на всяко codeиране в света.

Unicode codeиране

„Така през 1993 г. беше създадено codeирането Unicode и езикът Java стана първият език за програмиране, който използва това codeиране като стандарт за съхранение на текст. Сега Unicode е стандартът за цялата ИТ индустрия.

„Въпреки че самият Unicode е стандартът, той има няколко представяния or формати за трансформация на Unicode (UTF): UTF-8, UTF-16 и UTF-32 и т.н.

„Java използва усъвършенствана version на Unicode codeиране — UTF-16: всеки знак е codeиран в 16 бита (2 byteа). Може да побере до 65 536 знака! Можете да намерите почти всеки знак от всяка азбука в света в това codeиране. "

— Надявам се, че няма нужда да го знам наизуст?

— Ако искаш, давай!

„Добре, добре. Ще използвам това правило: не можете да знаете всичко, но можете да търсите в Google всичко.“

„Приемането на рационален подход е всичко. Така че, за да напишете Unicode знак във вашата програма, използвайки нейния code, трябва да напишете \u+ codeа в шестнадесетичен . Например,\u00A9

Код Конзолен изход
System.out.println("\u00A9 CodeGym");
© CodeGym

Unicode: codeова точка

„640 килоbyteа трябва да са достатъчни за всички! Или не“. Бил Гейтс веднъж каза това. Или не. Поне този цитат се приписва на него."

„Хаха. 640 килоbyteа дори не са достатъчни, за да заредят мозъка на почистващ робот.“

„Животът е тежък и с времето UTF-16 codeирането започна да става неадекватно. Оказва се, че има много азиатски езици и те имат много глифове. И всички тези глифове просто не могат да бъдат натъпкани в 2 byteа ."

— Е, Howво да правим?

„Използвайте повече byteове ! Но типът char е само 2 byteа и промяната му на 4 не е толкова лесна: мorарди редове Java code са написани по целия свят, който ще се повреди, ако типът char изведнъж стане 4 byteа в Java така че не можем да променим типа char!

„Има друг подход. Спомнете си How избягваме знаци, като поставяме обратна наклонена черта пред тях. По принцип ние codeирахме един знак, използвайки множество знаци. Създателите на Java решиха да използват същия подход.

„Някои символи, които визуално изглеждат като един знак, са codeирани като две chars в низ:

Код Конзолен изход
System.out.println("\uD83D\uDD0A");
🔊

„Сега вашата Java програма може дори да извежда емотикони към конзолата 😎“

„Определено ще го използвам, за да се забавлявам!“