1. Основні спеціальні символи та екранування
У програмуванні рядки складаються не лише з літер, а й зі спеціальних символів: лапок, перенесення рядка, табуляції, а інколи — навіть значків на кшталт \n і \t. Але якщо ви захочете написати в рядку Привіт, "user"!, компілятор одразу запитає: «А лапки всередині рядка — це що, помилка?». Ось тут і стає в пригоді механізм екранування.
У Java екранування — це спосіб указати, що деякі символи всередині рядка слід трактувати особливо. Для цього використовується зворотна скісна риска \ (вона ж «backslash»).
Класичні спеціальні символи:
| Послідовність | Опис | Демонстрація |
|---|---|---|
|
Перенесення рядка | Натискання Enter |
|
Табуляція | Клавіша Tab |
|
Дослівно: «зворотна скісна риска» | |
|
Лапка всередині рядка | |
|
Одинарна лапка (рідко потрібна в рядках) | |
|
Повернення каретки (старіший стиль перенесення рядка; уживається рідко) | |
|
Нульовий символ (null) | (Невидимий) |
|
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);
"""
За допомогою текстових блоків також можна легко створювати багаторядковий текст, який містить лапки, не дублюючи їх.
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);
Головне правило: завжди екрануйте спеціальні символи й лапки. Це убереже від прихованих багів і заощадить години на налагодження.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ