— Приветствую, Амиго. Когда-то Когда-то давно ты узнал, что чтобы записать в коде строку символов, нужно обернуть эти символы в двойные кавычки.
— Да, и получится строковой литерал. Не так уж давно я об этом узнал.
— По рамкам нашей с тобой профессии — давно. Но речь сейчас не об этом. Ты мне лучше скажи, что делать, если нам нужно, чтобы кавычки были внутри строкового литерала?
— Хм… Строка, содержащая кавычки — что может быть проще. Какое-нибудь название…
— Да. Допустим, мы хотим вывести текст Фильм "Друзья" номинирован на "Оскар"
. Как это сделать?
— Если честно, понятия не имею. Не могу ничего придумать.
— Логикой до решения не дойдёшь. Давай я тебе покажу сразу на разбираться.
Код | Примечания |
---|---|
|
Этот вариант работать не будет! |
— Такой вариант не будет работать, поскольку компилятор считает, что тут записан совсем другой код:
Код | Примечания |
---|---|
|
Этот вариант работать не будет! |
— После того, как компилятор встретит двойные кавычки в коде, он будет считать их началом строкового литерала. Следующие двойные кавычки — окончанием строкового литерала.
— Так как же записать в двойные кавычки внутри литерала?
— Способ есть, ему даже дали название — экранирование символов. Ты просто пишешь внутри строки текста кавычки, а перед кавычками добавляешь символ \ (обратная косая черта или обратный слеш или бекслеш, от англ. backslash).
— Вот как будет выглядеть правильно записанный строковой литерал:
Код | Примечания |
---|---|
|
Это сработает! |
— Компилятор все поймет правильно и не будет считать кавычки, расположенные после обратной косой черты, обычными кавычками.
— Более того, если вывести данную строку на экран, кавычки с обратной косой чертой будут правильно обработаны, и на экран будет выведена надпись без обратной косой черты: Фильм "Друзья" номинирован на "Оскар"
— Не скажу, что прямо очень удобно…
— Что делать, таковы правила. Ещё один важный момент. Кавычки, предваренные обратной косой чертой — это один символ: мы просто пользуемся таким хитрым способом записи, чтобы не мешать компилятору распознавать строковые литералы в коде. Ты можешь присвоить кавычки в переменную char
:
Код | Примечания |
---|---|
|
\" — это один символ, а не два |
|
так тоже можно: двойная кавычка внутри одинарных кавычек |
Часто возникающие ситуации при экранировании символов

— Помимо двойных кавычек, есть еще много символов, которые по-особому обрабатываются компилятором. Например, перенос строки.
— Как добавить в литерал перенос строки? Для этого тоже есть специальная комбинация:
\n
— Если тебе нужно добавить в строковой литерал перенос строки, просто добавь пару символов – \n
.
Пример:
Код | Вывод на экран |
---|---|
|
|
— Всего таких специальных комбинаций 8: их еще называют escape-последовательностями, вот они:
Код | Описание |
---|---|
\t |
Вставить символ табуляции |
\b |
Вставить символ возврата на один символ |
\n |
Вставить символ новой строки |
\r |
Вставить символ возврата каретки |
\f |
Вставить символ прогона страницы |
\' |
Вставить одинарную кавычку |
\" |
Вставить двойную кавычку |
\\ |
Вставить обратный слеш |
— Две из них ты мне уже показал. А что значат остальные 6?
— Сейчас всё объясню.
Символ табуляции – \t
Данный символ в тексте эквивалентен нажатию на клавиатуре клавиши Tab
при наборе текста. Он сдвигает следующий за ним текст с целью его выровнять.
Пример:
Код | Вывод на экран |
---|---|
|
|
Возврат на один символ назад – \b
Данный символ в тексте эквивалентен нажатию на клавиатуре клавиши Backspace
при наборе текста. Он удаляет последний выведенный символ перед ним:
Код | Вывод на экран |
---|---|
|
|
Символ возврата каретки – \r
Этот символ переносит курсор в начало текущей строки, не меняя текста. Следующий выводимый текст будет перетирать существующий.
Пример:
Код | Вывод на экран |
---|---|
|
Мир! |
Символ прогона страницы – \f
Это символ дошел до нас из эпохи первых матричных принтеров. Если подать такой символ на печать, это приводило к тому, что принтер просто прокручивал текущий лист, не печатая текст, пока не начнется новый.
Сейчас бы мы назвали его разрыв страницы или новая страница.
Обратный слэш – \\
Ну а тут вообще все просто. Если мы используем обратную косую черту (обратный слэш) в тексте, чтобы экранировать символы, то как тогда записать в текстовой строке сам символ косой черты?
Все просто: чтобы добавить в текст символ обратной косой черты, его нужно написать два раза подряд.
Пример:
Код | Вывод на экран |
---|---|
|
Компилятор будет ругаться на неизвестные экранированные символы. |
|
Вот так правильно! |
— Двойной слэш — это логично. А вот всё остальное сразу не запомню. Придётся пользоваться твоими подсказками.
— Постепенно запомнишь то, что нужно. Не переживай. А для остального есть Google.
Кодировка Unicode
— Ты уже знаешь, что каждому символу, отображаемому на экране, соответствует определенный числовой код. Стандартизированный набор таких кодов называют кодировкой.
— Когда-то давно, когда только изобрели компьютеры, для кодировки всех символов было достаточно семи бит (меньше одного байта) – первая кодировка содержала всего 128 символов. Называлась такая кодировка ASCII.
— Странное название.
— Ничего странного. Это сокращение такое. ASCII (англ. American Standard Code for Information Interchange) — американская стандартная кодировочная таблица для печатных символов и некоторых специальных кодов.
— Она состояла из 33 непечатных управляющих символов (влияющих на обработку текста и пробелов) и 95 печатных символов, включая цифры, буквы латинского алфавита в строчном и прописном вариантах и ряд пунктуационных символов.

— Рост популярности компьютеров привел к тому, что каждая страна начала выпускать свою кодировку. Обычно за основу брали ASCII и заменяли редко используемые символы на символы национальных алфавитов.
— Со временем появилась идея: создать одну кодировку, в которой разместить все символы всех мировых кодировок.

— Так в 1993 году была создана кодировка Unicode, и язык Java был первым языком программирования, который использовал ее как стандарт хранения текста. Сейчас же Unicode — стандарт всей ИТ-индустрии.
— И хотя Unicode сам по себе является стандартом, у него есть несколько форм представления (Unicode transformation format, UTF): UTF-8, UTF-16 и UTF-32, и пр.
— В Java используется продвинутая разновидность кодировки Unicode – UTF-16: каждый символ в которой кодировался 16 битами (2 байтами). Она способна вместить до 65,536 символов! В этой кодировке можно найти почти все символы всех алфавитов мира.
— Я надеюсь, её не нужно знать наизусть?
— Хочешь — рискни!
— Ладно-ладно. Воспользуюсь правилом: “нельзя знать всё, но всё можно загуглить”.
— Рациональный подход — наше всё. Так вот, чтобы записать в коде программы символ кодировки Unicode по его коду, нужно написать \u
+ шестнадцатеричные цифры кода. Например \u00A9
Код | Вывод на экран |
---|---|
|
|
Unicode: codepoint
— “640 Килобайт хватит всем! Или нет”. Так когда сказал Билл Гейтс. Или не говорил. По крайней мере, эту цитату ему приписывают.
— Ха-ха. Да 640 килобайт не хватит, чтобы загрузить даже мозг робота-уборщика.
— Жизнь — суровая штука, и кодировки UTF-16 со временем стало не хватать. Оказалось, что в Азии очень много языков, а у них очень много иероглифов. И все иероглифы просто невозможно засунуть в 2 байта.
— И что же делать?
— Использовать больше байт! Вот только тип char занимает всего 2 байта и поменять его на 4 не так просто: в мире написаны миллиарды строк кода на Java, которые будут работать неправильно, если вдруг в Java-машине тип char станет 4 байта. Так что менять тип char нельзя!
— Есть и другой подход. Вспомни, как мы экранируем символы с помощью префикса в виде косой черты. Мы, по сути, кодировали один символ с помощью нескольких символов. Этот же подход решили использовать и разработчики Java.
— Некоторые символы, которые визуально выглядят как один символ, в строке кодируются двумя char
'ами:
Код | Вывод на экран |
---|---|
|
🔊 |
— Теперь твоя программа на Java может выводить в консоль даже emoji 😎
— Обязательно воспользуюсь на досуге!
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ