1. Введение
На практике чаще всего встречаются такие задачи со строками:
- Получить длину строки (и узнать, не пуста ли она).
- Поменять регистр букв (сделать ВСЁ ВЕРХНИМ или всё нижним).
- Найти, содержит ли строка искомое слово или символ.
- Заменить "плохое слово" на более приличное.
- Разбить строку на части по разделителю ("список телефонов через запятую").
- Удалить пробелы в начале и конце строки.
- Получить часть строки (например, первые 3 буквы фамилии).
- Сравнить две строки — совпадают ли они, если игнорировать регистр.
И для каждой такой задачи у класса string есть свой метод.
Таблица ключевых методов
| Операция | Метод/Свойство | Пример |
|---|---|---|
| Длина строки | |
|
| Первый символ | |
|
| Последний символ | |
|
| К нижнему регистру | |
|
| К верхнему регистру | |
|
| Проверить, есть ли подстрока | |
|
| Позиция подстроки | |
|
| Извлечь часть строки | |
|
| Сравнить строки | |
|
| Удалить пробелы | |
|
| Разбить по разделителю | |
|
| Объединить массив в строку | |
|
| Заменить часть | |
|
| Пустая строка? | |
|
Сегодня мы разберем некоторые из них.
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 есть 2 специальных метода: 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".
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ