1. Основні спецсимволи та екранування
У програмуванні рядки складаються не лише з літер, а й зі спеціальних символів: лапок, перенесень рядків, табуляцій, а іноді навіть послідовностей на кшталт \n і \t. Але якщо ви захочете написати в рядку Привіт, "user"!, компілятор одразу запитає: «Лапки всередині рядка — це помилка?». Ось тут і потрібен механізм екранування.
У C# екранування — це спосіб позначити особливе трактування деяких символів у рядку. Для цього використовується зворотний слеш \ (його ще називають «бекслеш»).
Класичні спецсимволи
| Послідовність | Опис | Демонстрація |
|---|---|---|
| \n | Перенесення рядка | Натискання Enter |
| \t | Табуляція | Tab |
| \\ | Буквально «зворотний слеш» | \ |
| \" | Лапка всередині рядка | " |
| \' | Одинарна лапка (у рядках потрібна рідко) | ' |
| \r | Повернення каретки (застарілий спосіб перенесення рядка; використовується рідко) | |
| \0 | Нульовий символ | (невидимий) |
| \b | Backspace (видаляє попередній символ; у консолі спрацьовує не завжди) |
Як це працює
Напишімо кілька рядків із екранованими символами, щоб побачити їх у дії.
Console.WriteLine("Привіт, \"Користувач\"!");
// Вивід: Привіт, "Користувач"!
Console.WriteLine("C:\\Program Files\\MyApp");
// Вивід: C:\Program Files\MyApp
Console.WriteLine("Рядок 1\nРядок 2");
// Вивід:
// Рядок 1
// Рядок 2
Console.WriteLine("Я\tлюблю\tтабуляцію!");
// Вивід:
// Я люблю табуляцію!
Ось так, за допомогою одного простого символу (\) ви можете вставити в рядок майже будь-який спецсимвол, не спричиняючи паніки в компілятора чи колеги по команді.
2. Звичайні та дослівні рядки (@-рядки)
А що, якщо вам потрібно багато разів писати зворотний слеш — наприклад, у шляхах до файлів? Постійно набирати \\ — випробування для нервів. На щастя, у C# є дослівні рядкові літерали (verbatim strings), які починаються з символу @.
Як це виглядає?
string path = "C:\\Users\\Ann\\Documents\\";
string verbatimPath = @"C:\Users\Ann\Documents\";
У дослівних рядках екранування не потрібне — бекслеш вважається звичайним символом. Але є нюанс: лапки всередині таких рядків треба писати подвоєно!
string quote = @"Це дослівний рядок з лапками: ""Hello""!";
Console.WriteLine(quote);
// Вивід: Це дослівний рядок з лапками: "Hello"!
Візуальне порівняння
| Стиль | Синтаксис | Як працює |
|---|---|---|
| Звичайний | "C:\\Folder\\File.txt" | Кожен \ — подвоєний |
| Дослівний (@) | @"C:\Folder\File.txt" | Усі \ — звичайні |
| Дослівний з лапками | @"Text з ""лапками"" всередині" | Лапки — подвійні |
Порада: використовуйте дослівні рядки для шляхів до файлів, багаторядкового тексту та шаблонів регулярних виразів.
3. Перенесення рядків і багаторядкові рядки
Часто потрібно написати багаторядкове повідомлення або ASCII-арт. Найпростіший спосіб — скористатися \n у звичайному рядку або дослівними літералами. Дослівний літерал зберігає всі символи як є, зокрема перенесення рядків. Приклад:
Console.WriteLine("Перший рядок\nДругий рядок");
Console.WriteLine(@"Багаторядковий рядок.
У якому не потрібні екрановані перенесення
Й навіть табуляції працюють як є.");
Також у C# нещодавно зʼявилися raw string literals (потрійні лапки), які теж дозволяють записувати багаторядковий текст, але без дублювання лапок. Приклад:
string json = """
{
"name": "Alice",
"age": 30,
"skills": ["C#", "SQL", "Azure"]
}
""";
Console.WriteLine(json);
4. Unicode — як у C# зберігаються будь-які символи світу
У сучасному світі ми працюємо не лише з латиницею, а й із кирилицею, ієрогліфами, математичними символами й навіть емодзі. Усе це можливо завдяки системі кодування символів — Unicode.
Що таке Unicode?
Unicode — це міжнародний стандарт, який присвоює унікальний номер (кодову позицію) кожному символу, незалежно від мови та платформи. Завдяки цьому ви можете легко використовувати в C# одночасно кириличний текст, англійський текст, китайські ієрогліфи й навіть рідкісні спецсимволи.
Приклад рядка різними мовами:
Console.WriteLine("Hello, світ! 你好! مرحبا!");
Unicode-символи в рядках
Ви можете безпосередньо писати будь-які символи, які підтримує ваше кодування, або використовувати escape-послідовності виду \uXXXX, де XXXX — чотиризначний шістнадцятковий код символу.
Console.WriteLine("Символ: \u263A"); // Виведе ☺
Для символів із кодом понад 65 535 (наприклад, багато смайликів) використовується \UXXXXXXXX (вісім цифр):
Console.WriteLine("Смайлик: \U0001F60A"); // Виведе 😊
Що це вам дає?
- Ви можете зберігати й обробляти будь-який текст.
- Не бійтеся змішувати мови й використовувати нестандартні символи — C# і .NET підтримують Unicode без додаткових налаштувань.
- Особливо важливо під час роботи з міжнародними користувачами й нестандартними алфавітами.
5. Смайлики та спецсимволи в рядках
Сучасні рядки — це не лише літери, а й емодзі! Наприклад, ви хочете надіслати користувачеві веселе повідомлення з «усмішкою».
Як додати смайлик у рядок?
Вставте емодзі безпосередньо в рядок:
Просто скопіюйте потрібний смайлик (наприклад, 😊, 🚀, 🐱) і вставте в рядковий літерал:
Console.WriteLine("Привіт! 😊");
Використовуйте Unicode-коди:
Для більшості смайликів використовуйте \U і вісімзначний код.
Console.WriteLine("Ось котик: \U0001F431"); // 🐱
Коди емодзі можна знайти в онлайн-таблицях Unicode.
Особливості роботи зі смайликами
Смайлики можуть займати два або більше символів у рядку (бо їхній Unicode-код понад 16 біт).
Для деяких операцій (наприклад, пошуку довжини рядка) можуть траплятися «сюрпризи»:
string s = "😊";
Console.WriteLine(s.Length); // Може вивести 2, а не 1!
Це повʼязано з тим, що кодова позиція цього смайлика кодується двома символами.
Під час виведення в консоль або на веб-сторінку більшість емодзі відображаються коректно, якщо ваша система й шрифт їх підтримують.
Приклад виведення рядка з емодзі
Console.WriteLine("Вітаємо з успіхом! 🎉 Ти молодець! 🚀");
6. Підводні камені та часті помилки
Початківці часто плутають екранування лапок і зворотних слешів. Наприклад, якщо забути про екранування, компілятор вирішить, що ви завершили рядок завчасно.
Помилка:
Console.WriteLine("Він сказав: "Привіт!""); // Помилка! Компілятор розгубиться.
Правильно:
Console.WriteLine("Він сказав: \"Привіт!\"");
Або якщо потрібно вивести шлях до файлу, іноді роблять так:
Console.WriteLine("C:\Temp\file.txt"); // Буде помилка або неочікуваний результат, наприклад: C: emp ile.txt
Бо \t і \f — це спецсимволи (табуляція і переведення сторінки). Виправити можна двома основними способами:
Console.WriteLine("C:\\Temp\\file.txt"); // Подвоєні бекслеші
Console.WriteLine(@"C:\Temp\file.txt"); // Дослівний рядок
Памʼятайте: якщо ви використовуєте дослівний рядок, але в ньому потрібні лапки, їх треба подвоювати:
Console.WriteLine(@"Файл ""config.txt"" не знайдено."); // Файл "config.txt" не знайдено.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ