JavaRush /Курси /C# SELF /Розширені методи класу string

Розширені методи класу string

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

1. Пошук підрядка в рядку

На попередній лекції ви навчилися отримувати підрядок з рядка. Тут ви дізнаєтеся, як знаходити один рядок в іншому. Для цього є п’ять зручних методів:

Метод Contains: чи містить рядок підрядок?

Повертає true, якщо переданий рядок міститься в тому рядку, для якого викликано метод.

string phrase = "Вітер змін";
bool hasWord = phrase.Contains("змін"); // true
Перевірка наявності підрядка за допомогою Contains

Пошук чутливий до регістру! "вітер".Contains("В")false.

Метод IndexOf: знайти позицію підрядка

Працює подібно до IndexOf у масивах: шукає підрядок у рядку (від початку до кінця) і повертає індекс першого входження.

string text = "кавункавун";
int index = text.IndexOf("вун"); // 2
Пошук позиції підрядка за допомогою IndexOf
  • Якщо нічого не знайдено, повертає -1.
  • Є перевантаження з початковою позицією: IndexOf("вун", 4). Усе як у масивах.

Метод LastIndexOf: останнє входження

Так само, як і LastIndexOf у масивах: шукає підрядок у рядку (з кінця до початку) і повертає індекс першого з кінця входження підрядка.

string repeated = "задача задача";
int last = repeated.LastIndexOf("задача"); // 7
Пошук останнього входження підрядка за допомогою LastIndexOf

Чи починається/закінчується рядок заданим підрядком

Часто потрібно перевірити, чи починається (або закінчується) рядок певним підрядком. Для цього є два методи:

  • StartsWith — перевіряє, що рядок починається з певного підрядка;
  • EndsWith — перевіряє, що рядок закінчується заданим підрядком.
string fileName = "photo.jpg";
bool isJpg = fileName.EndsWith(".jpg"); // true

string email = "support@company.com";
bool isSupport = email.StartsWith("support"); // true
Перевірка початку й кінця рядка

Якщо хочете виконувати порівняння без урахування регістру, передайте додатковий параметр із зазначенням режиму порівняння (див. документацію для StringComparison.OrdinalIgnoreCase).

2. Метод Replace: заміна символів і підрядків

Метод Replace замінює всі входження рядка А на рядок Б. Зʼявився як інструмент для боротьби з описками, цензурою і заміною змінних у шаблонах! (Жарт.)

string address = "Лондон, вулиця Бейкер-стріт";
string updated = address.Replace("Лондон", "Париж");
Console.WriteLine(updated); // "Париж, вулиця Бейкер-стріт"
Заміна підрядка за допомогою Replace
  • Можна замінити навіть окремі символи: str.Replace('а', 'я')
  • Важливо: усі заміни відбуваються у всьому рядку, а не тільки в першому входженні.

3. Метод Split: ріжемо рядок на шматочки

Метод Split працює так: бере ваш рядок і ділить його на частини, використовуючи роздільники — символи або рядки, за якими потрібно ділити. Метод повертає масив рядків, на які розбито початковий рядок.

string[] parts = originalString.Split(separator);
Синтаксис методу Split
  • separator — символ або масив символів, що використовуються як роздільник.

Найпростіший приклад

Розділимо рядок за пробілом:

string input = "яблуко груша апельсин банан";
string[] fruits = input.Split(' '); 	// містить масив ["яблуко","груша","апельсин","банан"]
Console.WriteLine(fruits[0]); 			// "яблуко"
Console.WriteLine(fruits[1]); 			// "груша"

Маємо масив рядків на 4 елементи: кожне слово — окремий елемент масиву.

Кілька роздільників

Іноді в рядку може бути не лише один тип роздільника. Наприклад, користувач міг ввести значення через пробіл, кому або крапку з комою.

У таких випадках можна використати масив символів-роздільників:

string input = "яблуко, груша; апельсин банан";
char[] separators = { ' ', ',', ';' };
string[] fruits = input.Split(separators, StringSplitOptions.RemoveEmptyEntries);

Бонус: необовʼязковий параметр StringSplitOptions.RemoveEmptyEntries прибирає порожні фрагменти. Він потрібен, якщо користувач увів кілька роздільників підряд — наприклад, два пробіли або щось на кшталт "яблуко,, груша".

Розділення за підрядком

Роздільники можуть бути й рядками, а не лише символами. Наприклад, якщо у вас файл CSV із роздільником ";" або |:

// Роздільник із одного символу
string data = "Іванов;Петров;Сидоров";
string[] names = data.Split(';'); // по символу ';'

// Або, якщо роздільник - цілий рядок:
string log = "2024-01-01::Помилка::Не вдалося виконати завдання";
string[] separators = { "::" };
string[] parts = log.Split(separators);

4. Метод Join: збираємо масив рядків назад

Метод Join виконує зворотну операцію: приймає масив рядків і поєднує їх в один рядок, вставляючи між елементами обраний вами роздільник.

string result = string.Join(separator, arrayOfStrings);
Синтаксис методу Join
  • separator — рядок, який вставляють між елементами.
  • arrayOfStrings — масив або колекція рядків (string[], List<string> тощо).

Найпростіший приклад

Створимо з масиву рядків один рядок із комами:

string[] items = { "яблуко", "груша", "апельсин", "банан" };
string joined = string.Join(", ", items);
Console.WriteLine(joined); // "яблуко, груша, апельсин, банан"
Обʼєднання масиву рядків за допомогою Join

Обʼєднання з порожнім роздільником — поєднуємо рядки в один

Іноді потрібно просто зібрати рядки поспіль, не вставляючи між ними нічого:

string[] parts = { "Я", "люблю", "C#" };
string message = string.Join("", parts);
Console.WriteLine(message); // "ЯлюблюC#"
Обʼєднання рядків без роздільника

5. Типові граблі

Дуже часто початківці забувають прибрати зайві пробіли після розділення рядка методом Split. Наприклад, якщо у користувача здригнулася рука і він написав "яблуко, груша ,банан", то після Split вийдуть елементи на кшталт " груша ". Якщо відразу перетворити це на числа або виконувати порівняння, виникне помилка. Використовуйте Trim() після Split для кожного елемента — це добра звичка.

Другий момент — зайві порожні рядки. Коли користувач увів два роздільники підряд або почав і закінчив рядок роздільником, Split може повернути порожні елементи. Увімкайте StringSplitOptions.RemoveEmptyEntries, щоб уникнути збоїв.

Якщо масив для Join містить порожні елементи або null, то Join їх просто проігнорує. Але якщо ви цього не хочете (наприклад, для звіту важливо показати, що деякі значення були пропущені), спершу обробіть масив вручну.

І ще: Split ніколи не змінює початковий рядок, а повертає новий масив. Join теж не змінює початковий масив, а видає новий рядок. Пам’ятайте: рядки й масиви в C# — незмінні.

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