1. Причини за избягване на знаци

Имало едно време научихте, че за да напишете низ от знаци в code, трябва да ги поставите в двойни кавички. Резултатът е низов литерал .

Но Howво да правим, ако имаме нужда от кавички вътре в низов литерал? Низ, съдържащ кавички - Howво по-лесно?

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

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

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

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

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

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


2. Бягство от символи

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

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

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

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

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

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

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

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

Често срещани ситуации, които включват избягване на знаци

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

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

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

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

Пример:

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

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

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

Познавате две от тях, но Howво означават останалите 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");
Hell World!

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

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

Пример:

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

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

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

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

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

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

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

Пример:

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


4. Unicode codeиране

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

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

ASCII означава Американски standardн code за обмен на информация — стандартна американска codeова table за печатни знаци и някои специални codeове.

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

Unicode codeиране

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

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

Unicode codeиране 1

Така през 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


5. Unicode: codeова точка

„640 килоbyteа трябва да са достатъчни за всички! Или не“. (Цитат, приписан на Бил Гейтс)

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

Какво може да се направи? Използвайте повече byteове !

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

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

Създателите на Java решиха да използват същия подход.

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

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

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