JavaRush/Курсы/JAVA 25 SELF/Экранирование символов

Экранирование символов

Открыта

1. Основные спецсимволы и экранирование

В программировании строки состоят не только из букв, но и специальных символов: кавычки, переводы строки, табуляции, а иногда даже значки типа \n и \t. Но если вы захотите написать в строке Привет, "user"!, компилятор сразу же спросит: «А кавычки внутри строки — это что, ошибка?». Вот тут и нужен механизм экранирования.

В Java экранирование — это способ "указывать особое отношение" к некоторым символам внутри строки. Для этого используется обратный слэш \ (он же «backslash»).

Классические спецсимволы:

Последовательность Описание Демонстрация
\n
Перенос строки Нажал Enter
\t
Табуляция Таб
\\
Буквально "обратный слэш"
\
\"
Кавычка внутри строки
"
\'
Одинарная кавычка (редко нужно в строках)
'
\r
Возврат каретки (старый стиль переноса строки, редко используется)
\0
Null-символ (Невидимый)
\b
Backspace (удаляет предыдущий символ — в консоли работает не всегда)

Как это работает

Давайте напишем пару строк с экранированными символами, чтобы увидеть их в действии.

System.out.println("Привет, \"Пользователь\"!");
// Вывод: Привет, "Пользователь"!

System.out.println("C:\\Program Files\\MyApp");
// Вывод: C:\Program Files\MyApp

System.out.println("Строка 1\nСтрока 2");
// Вывод:
// Строка 1
// Строка 2

System.out.println("Я\tлюблю\tтабуляцию!");
// Вывод:
// Я         люблю    табуляцию!

Вот так, с помощью одной простой черточки (\), вы можете «протащить» в строку почти любой спецсимвол, не вызывая панику у компилятора или коллеги по команде.

2. Многострочные строки и переносы

Очень часто нужно написать многострочное сообщение или ASCII-арт. Самый прямолинейный способ — воспользоваться \n в обычной строке.

System.out.println("Первая строка\nВторая строка\nТретья строка");

Однако это не всегда удобно, поэтому в Java появились текстовые блоки (Text Blocks). Они начинаются с тройных кавычек """ и позволяют писать многострочный текст без экранирования, сохраняя форматирование — идеально для JSON, SQL и HTML.

// Многострочный литерал (Text Block)
String json = """
    {
        "name": "Alice",
        "age": 30,
        "skills": ["Java", "SQL", "Cloud"]
    }
    """;

System.out.println(json);
Текстовые блоки в Java """

С помощью текстовых блоков также можно легко создавать многострочный текст, который включает в себя кавычки, не дублируя их.

3. Unicode — как в Java хранятся любые символы мира

В современном мире мы работаем не только с латиницей, но и с кириллицей, иероглифами, математическими символами и даже эмодзи. Всё это возможно благодаря системе кодирования символов — Unicode.

Что такое Unicode?

Unicode — это международный стандарт, который присваивает уникальный номер (code point) каждому символу, независимо от языка и платформы. Благодаря этому вы можете легко использовать в Java одновременно кириллический текст, английский, китайские иероглифы и даже редкие спецсимволы.

Пример строки на разных языках:

System.out.println("Hello, мир! 你好! مرحبا!");

Unicode-символы в строках

Вы можете напрямую писать любые символы, поддерживаемые вашей кодировкой, или использовать escape-последовательности вида \uXXXX, где XXXX — 4-значный шестнадцатеричный код символа.

System.out.println("Символ: \u263A"); // Выведет 😊

Для символов с кодом больше 65535 (например, многие смайлики) используется пара суррогатов (UTF-16):

// Символ 😊 (код 1F60A) представлен двумя char
System.out.println("Смайлик: \uD83D\uDE0A"); // Выведет 😊

Что это вам даёт?

  • Вы можете хранить и обрабатывать любой текст.
  • Не бойтесь смешивать языки и использовать нестандартные символы — Java поддерживает Unicode «из коробки».
  • Особенно важно при работе с международными пользователями и нестандартными алфавитами.

4. Смайлики и спецсимволы в строках

Современные строки — это не только буквы, но и эмодзи! Например, вы хотите отправить пользователю весёлое сообщение с «улыбочкой».

Как добавить смайлик в строку?

Вставьте эмодзи напрямую в строку:

System.out.println("Привет! 😊");

Используйте Unicode-коды: для большинства смайликов можно использовать последовательности суррогатов.

System.out.println("Вот котик: \uD83D\uDC31"); // 🐱

Смайлики могут занимать два символа в строке (из-за UTF-16). Поэтому при некоторых операциях (например, получение длины) возможны сюрпризы:

String s = "😊";
System.out.println(s.length()); // Выведет 2, а не 1!

Это связано с тем, что один Unicode code point кодируется двумя char в Java. Для корректной работы с символами используйте code points и соответствующие методы вместо простого length().

5. Подводные камни и частые ошибки

Ошибка №1: Неправильное использование кавычек внутри строки. Если не экранировать внутренние кавычки, компилятор «думает», что строка закончилась.

System.out.println("Он сказал: "Привет!""); // Ошибка!

Правильно:

System.out.println("Он сказал: \"Привет!\"");

Ошибка №2: Одинарный обратный слэш в пути. В Java \ используется для спецсимволов (\n, \t, \f и др.). Поэтому строка "C:\Temp\file.txt" интерпретируется неверно.

System.out.println("C:\Temp\file.txt"); // Ошибка или неожиданный результат

Правильно:

System.out.println("C:\\Temp\\file.txt"); // Двойные слэши

Ошибка №3: Игнорирование текстовых блоков. Начиная с Java 15 используйте текстовые блоки — это упрощает работу с многострочными строками.

String path = """
    C:\Temp\file.txt
    """;
System.out.println(path);

Главное правило: всегда экранируйте спецсимволы и кавычки. Это избавит от скрытых багов и сэкономит часы отладки.

1
Задача
JAVA 25 SELF,  9 уровень,  1 лекция
Недоступна
Путь к файлу с обратными слэшами
Путь к файлу с обратными слэшами
1
Задача
JAVA 25 SELF,  9 уровень,  1 лекция
Недоступна
Многострочный вывод с помощью спецсимволов
Многострочный вывод с помощью спецсимволов
1
Задача
JAVA 25 SELF,  9 уровень,  1 лекция
Недоступна
Табуляция и кавычки в строке
Табуляция и кавычки в строке
1
Задача
JAVA 25 SELF,  9 уровень,  1 лекция
Недоступна
Unicode-символы и смайлики в строке
Unicode-символы и смайлики в строке
Комментарии (18)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Ivan Kulazhenkov
Уровень 23
3 июля, 09:09
Как я понял, 3 задачу решить невозможно
9 июля, 12:59
nightmarakeshBackend Developer в ITHub
23 июня, 23:17
package ru.javarush.java.core.level09.task03;

public class Solution {
    public static void main(String[] args) {
        System.out.println("\"Java\"\\t— язык программирования!");

    }
}
Вот код рабочий к третей задаче. Там просто косякнули с условиями, считайте вы работаете надо практикой исполльзование слэша не как спец символа
Gans Electro
Уровень 59
6 июня, 18:46
Если есть ошибки нужно напрямую писать админам. У вас есть кнопка с конвертом. Там можно писать Зепп Бранниган. Не можно, а нужно. Именно комменты под лекциями они читают редко
Evgeniy Fedorov
Уровень 2
21 марта, 09:54
☀️ - \u2600\uFE0F 😊 - \uD83D\uDE0A
20 февраля, 06:31
В третьей задаче глюк валидатора. Не принимает даже свое правильное решение.
StepV System Engineer
27 марта, 20:13
тоже самое
Anonymous #6483349
Уровень 29
10 апреля, 17:46
Я долго думала что я делаю не так , оказалось дело не во мне.
Владимир
Уровень 31
11 ноября 2025, 14:33
Скопировал "—" из "Правильного решения", только тогда валидатор принял, через альт набирал - не принимал.
29 октября 2025, 18:09
Глюк с задачей. Какое тире не поставь, валидатор предлагает поменять на предыдущее. Короткое на длинное, длинное на короткое. Правильное решение (по одноименной кнопке) валидатор не принимает
Sergey Mos Backend Developer
9 января, 07:48
\u2014 так приняло у меня
4 марта, 00:36
Красавчик! Спасибо.
Андрей
Уровень 28
27 сентября 2025, 19:57
Получить длинное тире — Зажимаешь левый Alt и набираешь на цифровой клавиатуре 0151 Делать это нужно при включенном NumLock'е.
Vitalii
Уровень 32
Expert
3 октября 2025, 17:42
и т.д. 0151++ )
Alina GabidulinaРаботает в M2
9 октября 2025, 06:09
а если у меня 75% огрызок?)
Андрей
Уровень 28
12 октября 2025, 12:49
Только скопировать из моего первого сообщения видимо ) — дарю, забирай 😁
German Malykh QA Automation Engineer
20 сентября 2025, 17:15
☀️ - \u2600\uFE0F
😊 - \uD83D\uDE0A
Anonymous #3637291
Уровень 1
28 сентября 2025, 16:35
<3