1. Детальніше про тип string
Тип string — один із найуживаніших у C#. Можливо, навіть найпопулярніший. Він надзвичайно зручний: у змінних цього типу зберігають текст. До того ж, на відміну від int і double, об’єкти типу string мають чимало методів, за допомогою яких можна робити багато корисного.
Усі об’єкти в C# (буквально всі) можуть бути перетворені на тип string. Точніше, кожен об’єкт у C# має своє текстове (рядкове) подання. Ми ще не раз повернемося до цього типу — він справді корисний і цікавий, — а сьогодні розглянемо його основи.
Створення змінних типу string
Тип string призначений для зберігання рядків (тексту). Щоб оголосити змінну, здатну зберігати текст, скористайтеся інструкцією:
string ім'я;
Де імʼя — це назва змінної.
Приклади:
| Інструкція | Опис |
|---|---|
| string name; | Оголошується рядкова змінна name |
| string message; | Оголошується рядкова змінна message |
| string text; | Оголошується рядкова змінна text |
Як і з типами int і double, можна використовувати короткий запис для оголошення кількох змінних типу string:
string ім'я1, ім'я2, ім'я3;
2. Присвоєння значень змінним типу string
Щоб надати змінній типу string значення, використайте інструкцію:
ім'я = "значення";
А ось і перша відмінність від уже знайомих типів: значення типу string — це текстові рядки, і їх беруть у подвійні лапки.
Приклади:
| Інструкція | Примітка |
|---|---|
| string name = "Аня"; | Змінна name містить текст Аня |
| string city = "New York"; | Змінна city містить текст New York |
| string message = "Hello!"; | Змінна message містить текст Hello! |
3. Ініціалізація змінних типу string
Як і у випадку з типами int і double, змінні типу string можна ініціалізувати одразу під час оголошення. Насправді так можна з усіма типами в C#, тож далі на цьому не зупинятимемося.
string ім'я1 = "рядок1", ім'я2 = "рядок2";
Приклад створення та ініціалізації змінних
string name = "Аня", city = "New York", message = "Hello!";
Використовувати можна лише ініціалізовані змінні
Компілятор C# повідомить про помилку, якщо ви оголосите змінну без значення та спробуєте її використати.
Такий код не працюватиме:
string name;
Console.WriteLine(name); // Змінна name не ініціалізована. Програма не скомпілюється.
int a;
a++; // Змінна a не ініціалізована. Програма не скомпілюється.
double x;
double y = x; // Змінна x не ініціалізована. Програма не скомпілюється.
4. Конкатенація — склеювання рядків
Є дуже зручна операція, яку можна виконувати з рядками в C# — їх можна об’єднувати. Така операція називається конкатенація. Часто її також називають «склеюванням рядків» або просто «додаванням рядків». Щоб легше запам’ятати — Кон-Коте-Нація.
Щоб об’єднати два рядки, використайте оператор +. Це дуже просто:
"значення1" + "значення2"
Приклади:
| Інструкція | Примітка |
|---|---|
| string name = "Аня" + "Аня"; | name містить рядок АняАня |
| string city = "New York" + "Аня"; | city містить рядок New YorkАня |
| string message = "Hello! " + "Аня"; | message містить рядок Hello! Аня |
Звісно, можна одночасно додавати багато рядків, а також комбінувати рядки та змінні.
Приклади:
string name = "Аня"; // name містить рядок Аня
string city = "New York"; // city містить рядок New York
string message = "Hello!" + city + name + city; // message містить рядок Hello!New YorkАняNew York
5. Порожні рядки
В останньому прикладі видно, що текст у змінній message погано читається, бо в ньому не вистачає пробілів. Щоб додати один або кілька пробілів, достатньо вписати їх у код і взяти в подвійні лапки. Це простіше, ніж здається:
" "
До речі, якщо між лапками не залишити жодного символу (написати дві подвійні лапки підряд), вийде так званий «порожній рядок»:
""
Формально він існує, але під час виведення нічого не показує. І при об’єднанні з іншими рядками результат не змінює. Це своєрідний аналог нуля для рядків.
6. Екранування спеціальних символів у рядках
Ви вже знаєте, що рядки обрамляються подвійними лапками. Але що робити, якщо потрібно вставити в рядок самі лапки? Якщо ми поставимо лапки в рядку, хіба компілятор не сприйме їх за кінець рядка?
Так, сприйме. Тому лапки всередині тексту слід записувати як послідовність символів \". І код виглядатиме ось так:
string quote = "Він сказав: \"Вітаю!\"";
Console.WriteLine(quote); // Він сказав: "Вітаю!"
Насправді все трохи хитріше. Символ \ є керівним усередині рядків. За його допомогою задають різні «непечатні» символи — перехід на новий рядок, табуляцію тощо. А щоб отримати сам символ \, його потрібно написати двічі.
Ось чотири найуживаніші комбінації:
| Запис | Значення |
|---|---|
| \n | Перехід на новий рядок (newline) |
| \t | Табуляція (відступ) |
| \\ | Символ зворотної скісної риски \ |
| \" | Лапки всередині рядка |
Приклад:
string multiline = "Рядок 1\nРядок 2";
Console.WriteLine(multiline);
Результат:
// Рядок 1
// Рядок 2
7. Інтерполяція рядків ($-рядки)
C# — сучасна мова, що дозволяє елегантно вставляти значення змінних усередину рядка завдяки інтерполяції: просто додайте перед лапками символ $, а в самому рядку використовуйте фігурні дужки {}. Про це ви вже знаєте.
А ось чого ви, ймовірно, ще не знаєте: усередині фігурних дужок можна використовувати цілі вирази й навіть викликати методи! Приклад:
string name = "Оля";
int birthYear = 1999;
string info = $"Мене звати {name}, мені {2025-birthYear} років.";
Console.WriteLine(info); // Мене звати Оля, мені 26 років.
Такий підхід суттєво підвищує читабельність і зменшує кількість помилок (і дужок). Докладніше про інтерполяцію поговоримо в окремій лекції, а для простих випадків її вже можна сміливо застосовувати.
8. Методи рядків
Тип string має власні методи та властивості. Їх дуже багато, і вони полегшують життя програмістам. Сьогодні ви познайомитеся з кількома найпростішими з них. Наприклад:
| Метод/властивість | Опис | Приклад результату |
|---|---|---|
| str.Length | Довжина рядка | "abc".Length → 3 |
| str.ToUpper() | У верхній регістр | "abc".ToUpper() → "ABC" |
| str.ToLower() | У нижній регістр | "ABC".ToLower() → "abc" |
| str.Trim() | Видалити пробіли на краях | " x y ".Trim() → "x y" |
Приклади роботи з методами рядків
Усі ці методи викликаються ось так: змінна.метод(...).
Визначити довжину рядка:
string name = "Андрій";
int length = name.Length;
Console.WriteLine(length); // 6, бо 6 букв
Перетворити рядок у верхній або нижній регістр:
string original = "Привіт";
Console.WriteLine(original.ToUpper()); // ПРИВІТ
Console.WriteLine(original.ToLower()); // привіт
Видалити пробіли на краях (дуже корисно під час введення з клавіатури):
string messy = " hello ";
Console.WriteLine(messy.Trim()); // "hello"
Кожен такий метод повертає новий рядок; старий рядок при цьому не змінюється.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ