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

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

JAVA 25 SELF
9 уровень , 1 лекция
Открыта

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-символы и смайлики в строке
Комментарии (9)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Владимир Уровень 30
11 ноября 2025
Скопировал "—" из "Правильного решения", только тогда валидатор принял, через альт набирал - не принимал.
Юрий Волосатов Уровень 20
29 октября 2025
Глюк с задачей. Какое тире не поставь, валидатор предлагает поменять на предыдущее. Короткое на длинное, длинное на короткое. Правильное решение (по одноименной кнопке) валидатор не принимает
Sergey Mos Уровень 17
9 января 2026
\u2014 так приняло у меня
Андрей Уровень 27
27 сентября 2025
Получить длинное тире — Зажимаешь левый Alt и набираешь на цифровой клавиатуре 0151 Делать это нужно при включенном NumLock'е.
Vitalii Уровень 32 Expert
3 октября 2025
и т.д. 0151++ )
Alina Gabidulina Уровень 32
9 октября 2025
а если у меня 75% огрызок?)
Андрей Уровень 27
12 октября 2025
Только скопировать из моего первого сообщения видимо ) — дарю, забирай 😁
German Malykh Уровень 31
20 сентября 2025

☀️ - \u2600\uFE0F
😊 - \uD83D\uDE0A

Anonymous #3637291 Уровень 12
28 сентября 2025
<3