JavaRush /Курси /C# SELF /Екранування, спецсимволи та рядкова інтерполяція

Екранування, спецсимволи та рядкова інтерполяція

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

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" не знайдено.
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ