Полное руководство по языку программирования С# 14 и платформе .NET 10 / Работа со строками

Строки и класс String

Начальный ⏱ 4 мин чтения 👁 2 🕓 обновлено 11.08.2026

Довольно большое количество задач, которые могут встретиться при разработке приложений, так или иначе связано с обработкой строк - парсинг веб-страниц, поиск в тексте, какие-то аналитические задачи, связанные с извлечением нужной информации из текста и т.д. Поэтому в этом плане работе со строками уделяется особое внимание.

В языке C# строковые значения представляет тип string, а вся функциональность работы с данным типом сосредоточена в классе System.String. Собственно string является псевдонимом для класса String. Объекты этого класса представляют текст как последовательность символов Unicode. Максимальный размер объекта String может составлять в памяти 2 ГБ, или около 1 миллиарда символов.

Создание строк

Создавать строки можно, как используя переменную типа string и присваивая ей значение, так и применяя один из конструкторов класса String:


string s1 = "hello";
string s2 = new String('a', 6); // результатом будет строка "aaaaaa"
string s3 = new String(new char[] { 'w', 'o', 'r', 'l', 'd' });
string s4 = new String(new char[] { 'w', 'o', 'r', 'l', 'd' }, 1, 3); // orl

Console.WriteLine(s1);  // hello
Console.WriteLine(s2);  // aaaaaaa
Console.WriteLine(s3);  // world
Console.WriteLine(s4);  // orl

Конструктор String имеет различное число версий. Так, вызов конструктора

new String('a', 6)

6 раз повторит объект из первого параметра, то есть фактически создаст строку "aaaaaa".

Еще один конструктор принимает массив символов, из которых создается строка

string s3 = new String(new char[] { 'w', 'o', 'r', 'l', 'd' });

Третий использованный выше в примере конструктор позволяет создать строку из части массива символов. Второй параметр передает начальный индекс, с которого извлкаются символы, а третий параметр указывает на количество символов:

string s4 = new String(new char[] { 'w', 'o', 'r', 'l', 'd' }, 1, 3); // orl

Строка как набор символов

Так как строка хранит коллекцию символов, в ней определен индексатор для доступа к этим символам:


public char this[int index] {get;}

Применяя индексатор, мы можем обратиться к строке как к массиву символов и получить по индексу любой из ее символов:


string message = "hello";
// получаем символ
char firstChar = message[1]; // символ 'e'
Console.WriteLine(firstChar);   //e

Console.WriteLine(message.Length);  // длина строки  

Используя свойство Length, как и в обычном массиве, можно получить длину строки.

Перебор строк

Класс String реализует интерфейс IEnumerable, благодаря чему строку можно перебрать в цикле foreach как набор объектов char. Также можно с помощью других типов циклов перебрать строку, применяя обращение к символам по индексу:


string message = "hello";

for(var i =0; i < message.Length; i++)
{
    Console.WriteLine(message[i]);
}
foreach(var ch in message)
{
    Console.WriteLine(ch);
}

Сравнение строк

В отличие от других классов строки сравниваются по значению их символов, а не по ссылкам:


string message1 = "hello";
string message2 = "hello";

Console.WriteLine(message1 == message2);    // true

Многострочные строки

Начиная с C# 11 с помощью трех пар двойных кавычек можно оформить многострочный текст, в том числе с применением интерполяции:


Print();
PrintValue("hello");

void Print()
{
    string text = """
              <element attr="content">
                <body>
                </body>
              </element>
              """;
    Console.WriteLine(text);
}

void PrintValue(string val)
{
    string text = $"""
              <element attr="content">
                <body>
                {val}
                </body>
              </element>
              """;
    //// или так 
    //string text =  $$"""
    //          <element attr="content">
    //            <body>
    //            {{val}}
    //            </body>
    //          </element>
    //          """;
    Console.WriteLine(text);
}

Основные методы строк

Основная функциональность класса String раскрывается через его методы, среди которых можно выделить следующие:

  • Compare: сравнивает две строки с учетом текущей культуры (локали) пользователя

  • CompareOrdinal: сравнивает две строки без учета локали

  • Contains: определяет, содержится ли подстрока в строке

  • Concat: соединяет строки

  • CopyTo: копирует часть строки, начиная с определенного индекса в массив

  • EndsWith: определяет, совпадает ли конец строки с подстрокой

  • Format: форматирует строку

  • IndexOf: находит индекс первого вхождения символа или подстроки в строке

  • Insert: вставляет в строку подстроку

  • Join: соединяет элементы массива строк

  • LastIndexOf: находит индекс последнего вхождения символа или подстроки в строке

  • Replace: замещает в строке символ или подстроку другим символом или подстрокой

  • Split: разделяет одну строку на массив строк

  • Substring: извлекает из строки подстроку, начиная с указанной позиции

  • ToLower: переводит все символы строки в нижний регистр

  • ToUpper: переводит все символы строки в верхний регистр

  • Trim: удаляет начальные и конечные пробелы из строки

В следующих статьях разберем работу этих методов.

Проверь себя

📋 Тест по теме «Строки и класс String» Тест по теме

Практические задания

Лёгкое Ручная проверка Заполните пропуск в коде (1)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

string s1 = "_____";
string s2 = new String('a', 6); // результатом будет строка "aaaaaa"
string s3 = new String(new char[] { 'w', 'o', 'r', 'l', 'd' });
string s4 = new String(new char[] { 'w', 'o', 'r', 'l', 'd' }, 1, 3); // orl

Console.WriteLine(s1);  // hello
Console.WriteLine(s2);  // aaaaaaa
Console.WriteLine(s3);  // world
Console.WriteLine(s4);  // orl
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (2)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

new String('a', _____)
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (3)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

string s3 = new String(new _____[] { 'w', 'o', 'r', 'l', 'd' });
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (4)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

string s4 = new String(new char[] { 'w', 'o', 'r', 'l', 'd' }, _____, 3); // orl
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (5)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

public _____ this[int index] {get;}
Войдите, чтобы отправить решение
Среднее Ручная проверка Восстановите код по памяти (1)
+20 XP

В этом фрагменте кода урока пропущены два ключевых элемента. Впишите оба пропущенных значения через запятую в порядке появления (например: x, 5).

string s_____ = "hello";
string s2 = new String('a', 6); // результатом будет строка "aaaaaa"
string s3 = new String(new char[] { 'w', 'o', 'r', 'l', 'd' });
string s4 = new String(new char[] { 'w', 'o', 'r', 'l', 'd' }, 1, 3); // orl

Console._____(s1);  // hello
Console.WriteLine(s2);  // aaaaaaa
Console.WriteLine(s3);  // world
Console.WriteLine(s4);  // orl
Войдите, чтобы отправить решение
Среднее Ручная проверка Восстановите код по памяти (2)
+20 XP

В этом фрагменте кода урока пропущены два ключевых элемента. Впишите оба пропущенных значения через запятую в порядке появления (например: x, 5).

_____ String('a', _____)
Войдите, чтобы отправить решение
Среднее Ручная проверка Расставьте строки кода в правильном порядке
+20 XP

Строки кода из примера этого урока перемешаны. Впишите их в правильном порядке, каждую строку — с новой строки.

Console.WriteLine(s3);  // world
Console.WriteLine(s1);  // hello
string s1 = "hello";
string s4 = new String(new char[] { 'w', 'o', 'r', 'l', 'd' }, 1, 3); // orl
Console.WriteLine(s2);  // aaaaaaa
string s2 = new String('a', 6); // результатом будет строка "aaaaaa"
string s3 = new String(new char[] { 'w', 'o', 'r', 'l', 'd' });
Console.WriteLine(s4);  // orl
Войдите, чтобы отправить решение
Сложное Ручная проверка Объясните и модифицируйте пример из урока «Строки и класс String»
+30 XP

Опишите своими словами, что делает приведённый пример кода из урока «Строки и класс String», и предложите одно осмысленное изменение (например, другое входное значение или дополнительное условие). Приведите итоговый код.

string s1 = "hello";
string s2 = new String('a', 6); // результатом будет строка "aaaaaa"
string s3 = new String(new char[] { 'w', 'o', 'r', 'l', 'd' });
string s4 = new String(new char[] { 'w', 'o', 'r', 'l', 'd' }, 1, 3); // orl

Console.WriteLine(s1);  // hello
Console.WriteLine(s2);  // aaaaaaa
Console.WriteLine(s3);  // world
Console.WriteLine(s4);  // orl
Войдите, чтобы отправить решение
Сложное Ручная проверка Найдите потенциальную проблему в коде урока «Строки и класс String»
+30 XP

Изучите приведённый фрагмент кода и опишите, при каких входных данных или условиях он может сработать не так, как ожидается (граничный случай, отсутствие проверки и т.п.). Предложите исправленный вариант.

new String('a', 6)
Войдите, чтобы отправить решение
Мини-проект Ручная проверка Мини-проект по теме «Строки и класс String»
+50 XP

Соберите небольшую программу, которая последовательно демонстрирует ключевые идеи урока. Программа должна быть рабочей и содержать минимум два самостоятельно написанных фрагмента, а не просто копию примера из урока.

Войдите, чтобы отправить решение
Домашнее задание Ручная проверка Домашнее задание по теме «Строки и класс String»
+25 XP

Напишите собственную небольшую программу, применяющую материал темы «Строки и класс String». Используйте не менее одной конструкции, показанной в примерах урока. Прикрепите код решения и краткое описание того, что он делает.

Войдите, чтобы отправить решение

Обсуждение (0)

Войдите, чтобы оставить комментарий.