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

Основні методи класу string

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

1. Вступ

На практиці найчастіше трапляються такі завдання з рядками:

  • Дізнатися довжину рядка (і перевірити, чи він не порожній).
  • Змінити регістр літер (зробити ВСЕ ВЕЛИКИМИ або все малими).
  • Знайти, чи містить рядок потрібне слово або символ.
  • Замінити «погане слово» на пристойніше.
  • Розбити рядок на частини за роздільником («список телефонів через кому»).
  • Видалити пробіли на початку й у кінці рядка.
  • Витягти частину рядка (наприклад, перші три літери прізвища).
  • Порівняти два рядки — чи збігаються вони, якщо ігнорувати регістр.

І для кожного такого завдання в класі string є відповідний метод.

Таблиця ключових методів

Операція Метод/Властивість Приклад
Довжина рядка
Length
name.Length
Перший символ
[0]
name[0]
Останній символ
[name.Length - 1]
name[name.Length - 1]
До нижнього регістру
ToLower()
name.ToLower()
До верхнього регістру
ToUpper()
name.ToUpper()
Перевірити, чи міститься підрядок
Contains()
name.Contains("Іван")
Позиція підрядка
IndexOf()
name.IndexOf("а")
Витягти частину рядка
Substring()
name.Substring(1, 3)
Порівняти рядки
Equals(), ==
name.Equals("Петро")
Видалити пробіли
Trim()
name.Trim()
Розбити за роздільником
Split()
csv.Split(',')
Об’єднати масив у рядок
string.Join()
string.Join("-", array)
Замінити частину
Replace()
text.Replace("старе", "нове")
Порожній рядок?
IsNullOrEmpty()
string.IsNullOrEmpty(name)

Сьогодні розглянемо деякі з них.

2. Працюємо з рядком як із масивом

Довжина рядка: властивість Length

Найпростіше — дізнатися, скільки символів у рядку. Для цього використовуємо властивість Length. Приклад:

string name = "Аркадій";
Console.WriteLine(name.Length);  // Виведе: 7
  • Length — це властивість (не метод), тому дужки не потрібні.
  • Якщо рядок порожній (""), довжина буде 0.

Іноді корисно перевіряти довжину рядка перед тим, як робити з ним щось «ризиковане» (наприклад, брати підрядок).

Отримання символу за індексом: індексатор [i]

Як при роботі з масивами: рядок — це масив символів. Приклад:

string hello = "Привіт";
char firstChar = hello[0]; 	// 'П'
char lastChar = hello[^1]; 	// 'т'
Console.WriteLine(firstChar);
  • Індексація починається з нуля!
  • Будьте уважні: якщо звернутися до неіснуючого індексу (hello[100]), буде згенеровано виняток.

3. Порівняння рядків

Рядкові оператори == і !=

У мові C# ці оператори просто порівнюють два рядки за їхнім вмістом.

string word1 = "Hello";
string word2 = "Hello";
bool areEqual = word1 == word2; // true

Метод Equals

На відміну від оператора ==, у метод Equals можна передавати параметри. Наприклад, потрібне порівняння без урахування регістру — коли "Мама", "мама" і "МАМА" вважаються рівними. Приклад:

string pass1 = "Qwerty";
string pass2 = "qwerty";

// стандартне порівняння з урахуванням регістру
bool isSame = pass1.Equals(pass2); // false

// порівняння без урахування регістру
bool ignoreCase = pass1.Equals(pass2, StringComparison.OrdinalIgnoreCase); // true

4. Перетворення регістру

Щоб перетворити рядок до верхнього (або нижнього) регістру, в класі string є два спеціальні методи: ToLower() і ToUpper().

Хочете, щоб користувач бачив ваше повідомлення у стилі «ВАЖЛИВО!»? Або потрібно перевести всі імена в нижній регістр для коректного порівняння? Це просто:

string text = "Мені Не Страшний Сірий Вовк!";
Console.WriteLine(text.ToUpper()); // МЕНІ НЕ СТРАШНИЙ СІРИЙ ВОВК!
Console.WriteLine(text.ToLower()); // мені не страшний сірий вовк!
  • Зверніть увагу: вихідний рядок не змінюється!
  • Можна використати для перевірки збігу рядків без урахування регістру.

5. Видалення зайвих пробілів

А що, якщо користувач випадково (або й навмисно) додав пробіли на початку чи в кінці імені? Trim допоможе! Є три варіанти:

  • Trim — видаляє всі пробіли на початку й у кінці рядка;
  • TrimStart — видаляє пробіли на початку рядка;
  • TrimEnd — видаляє пробіли в кінці рядка.
string raw = "   Гоша   ";
string cleaned = raw.Trim(); 		// "Гоша"
Console.WriteLine($"[{cleaned}]");

6. Отримання підрядка: Substring

Іноді потрібно витягти з рядка лише частину.

string word = "Привіт";
string part = word.Substring(2);      // "ивіт"
string part2 = word.Substring(2, 3);  // "иві"
  • Substring(startIndex) — із символу startIndex до кінця.
  • Substring(startIndex, length) — починаючи з startIndex стільки символів, скільки вказано в length.

Увага: якщо ви виходите за межі рядка або length < 0, буде згенеровано виняток!

7. Перевірка рядка на порожнечу

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

a) Перевірка на null за допомогою оператора ==

string s = null;
if (s == null)
    Console.WriteLine("Рядок дорівнює null");

Мінус: не враховує порожній рядок ("").

b) Перевірка за допомогою string.IsNullOrEmpty()

Перевіряє і null, і порожній рядок:

string s = "";
if (string.IsNullOrEmpty(s))
    Console.WriteLine("Рядок порожній або дорівнює null");

c) Перевірка за допомогою string.IsNullOrWhiteSpace()

Додатково враховує рядки, що складаються лише з пробілів, табуляцій та інших «невидимих» символів:

string s = "     ";
if (string.IsNullOrWhiteSpace(s))
    Console.WriteLine("Рядок порожній, null або містить лише пробіли");

8. Типові помилки при роботі з рядковими методами

  • Найчастіше — забути, що рядки незмінні (immutable), як ми вже з’ясували вище.
  • Ще одна популярна помилка — забути про чутливість до регістру під час пошуку та порівняння.

Наприклад, якщо користувач введе імʼя «андрій», а у списку вже є «Андрій», то просте використання Contains або == може не спрацювати, якщо ви не переведете обидва рядки до одного регістру або не скористаєтеся відповідною перевантаженою версією методу.

Також будьте обережні з методами, що повертають індекси. Індекси починаються з нуля, і якщо повернулося -1, це означає, що нічого не знайдено, а не «індекс 0».

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