JavaRush /Курси /JAVA 25 SELF /Екранування символів

Екранування символів

JAVA 25 SELF
Рівень 9 , Лекція 1
Відкрита

1. Основні спеціальні символи та екранування

У програмуванні рядки складаються не лише з літер, а й зі спеціальних символів: лапок, перенесення рядка, табуляції, а інколи — навіть значків на кшталт \n і \t. Але якщо ви захочете написати в рядку Привіт, "user"!, компілятор одразу запитає: «А лапки всередині рядка — це що, помилка?». Ось тут і стає в пригоді механізм екранування.

У Java екранування — це спосіб указати, що деякі символи всередині рядка слід трактувати особливо. Для цього використовується зворотна скісна риска \ (вона ж «backslash»).

Класичні спеціальні символи:

Послідовність Опис Демонстрація
\n
Перенесення рядка Натискання Enter
\t
Табуляція Клавіша Tab
\\
Дослівно: «зворотна скісна риска»
\
\"
Лапка всередині рядка
"
\'
Одинарна лапка (рідко потрібна в рядках)
'
\r
Повернення каретки (старіший стиль перенесення рядка; уживається рідко)
\0
Нульовий символ (null) (Невидимий)
\b
Backspace (видаляє попередній символ — у консолі спрацьовує не завжди)

Як це працює

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

System.out.println("Привіт, \"Користувач\"!");
// Вивід: Привіт, "Користувач"!

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

System.out.println("Перший рядок\nДругий рядок");
// Вивід:
// Перший рядок
// Другий рядок

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

Отже, за допомогою зворотної скісної риски (\) ви можете вставити в рядок майже будь-який спеціальний символ, не лякаючи компілятор чи колег у команді.

2. Багаторядкові рядки та перенесення

Іноді потрібно сформувати багаторядкове повідомлення або ASCII-арт. Найпростіший спосіб — скористатися \n у звичайному рядку.

System.out.println("Перший рядок\nДругий рядок\nТретій рядок");

Але це не завжди зручно, тож у Java зʼявилися текстові блоки (text blocks). Вони починаються з потрійних лапок """ і дозволяють писати багаторядковий текст без екранування, зберігаючи форматування — ідеально для JSON, SQL і HTML.


// Багаторядковий літерал (текстовий блок)
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 — чотирицифровий шістнадцятковий код символу.

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

Для символів із кодом понад 65 535 (наприклад, багато емодзі) використовується пара сурогатів (UTF‑16):

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

Що це вам дає?

  • Ви можете зберігати й обробляти будь-який текст.
  • Не бійтеся поєднувати мови й використовувати нестандартні символи — Java підтримує Unicode «з коробки».
  • Це особливо важливо під час роботи з міжнародними користувачами та нестандартними алфавітами.

4. Емодзі та спеціальні символи у рядках

Сучасні рядки — це не лише літери, а й емодзі! Наприклад, ви можете надіслати користувачеві веселе повідомлення з «усмішкою».

Як додати емодзі до рядка?

Вставте емодзі безпосередньо в рядок:

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

Використовуйте Unicode‑коди: для більшості емодзі застосовують пари сурогатів.

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

Емодзі можуть займати два символи (char) у рядку, адже Java використовує 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);

Головне правило: завжди екрануйте спеціальні символи й лапки. Це убереже від прихованих багів і заощадить години на налагодження.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ