Включите исполнение JavaScript в браузере, чтобы запустить приложение.

Операции со строками String в C#: пишем программу без регулярных выражений

16 сен 2024
Разбираем основные операции со строками String в C#. Как написать свою первую программу в C# без регулярных выражений, используя операции со строковым типом данных. Разберем и приведем примеры работы основных операций: конкатенация, разделение, сравнение, поиск и замена.

Операции со строками String в C#: пишем программу без регулярных выражений

В разработке приложений и сервисов большой объем задач связан с обработкой строк: поиск , парсинг веб-страниц, извлечение информации из текста. Язык C# позволяет решать такие задачи без за счет встроенныхи методов. Рассказываем, почему это важно и как использовать возможности C# при работе со строковыми. 

Писать и хранить код удобно на российской платформе GitVerse, которая одновременно выполняет функции хранилища репозиториев, площадки для командной разработки и точки входа в активное комьюнити. К созданию приложений на C# можно привлечь других пользователей GitVerse и AI-помощника GigaCode. Виртуальный ассистент умеет анализировать контекст и предлагать функции, , циклы и условия для оптимальной реализации кода.

Регулярные выражения в C#

RegEx, или RegExp (regular expressions / регулярные выражения), — это инструментарий для обработки строк. Его основное назначение — находить последовательности символов в больших строковых значениях, извлекать информацию из неструктурированного текста и совершать операции с его фрагментами. Например:

  • идентифицировать повторяющиеся слова;
  • сделать начальные буквы всех слов заглавными;
  • выделить определенные фрагменты в URL.

Одна из особенностей RegEx — универсальность. Зная логику и синтаксис, можно использовать их в разных языках программирования, в том числе C#. Применение RegEx позволяет сократить код и оптимизировать решение задач, связанных с обработкой подстрок.

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

Почему частое использование регулярных выражений — плохая практика

В некоторых ситуациях применение RegEx неоправданно или неэффективно. К его недостаткам можно отнести:

  • ухудшение читаемости кода;
  • сложность поддержки проекта, особенно для новых разработчиков или специалистов без опыта работы с RegEx;
  • снижение производительности приложения;
  • возможные проблемы с утечкой памяти.

Это не означает, что регулярных выражений следует избегать. Они могут быть незаменимым инструментом для реализации сложных сценариев обработки текста. Однако при разработке на C# во многих случаях более рациональным решением является использование встроенных методов и операторов.

Операции над строками в C#

В C# объекты класса String представляют текст как последовательность символов Unicode. По умолчанию их максимальный размер составляет 2 Гб, а число символов — около 1 млрд.

Класс предоставляет ряд методов для выполнения операций со строковыми значениями. К основным можно отнести:

  • Compare — сравнение двух указанных объектов;
  • Contains — определение содержания подстроки;
  • Concat — сложение строковых значений (конкатенация);
  • CopyTo — копирование всего содержимого или определенного числа символов в диапазон назначения;
  • IndexOf — поиск индекса с отсчетом от нуля первого вхождения указанного символа;
  • LastIndexOf — поиск индекса последнего вхождения;
  • Split — разделение строкового значения на массив;
  • ToLower — перевод всех символов в нижний регистр;
  • ToUpper — перевод всех символов в верхний регистр;
  • Trim — удаление пробелов в начале и конце строкового значения;
  • Equals — определение эквивалентности значений указанных объектов или экземпляров; 
  • Format — форматирование;
  • Substring — извлечение последовательности символов из заданного экземпляра;
  • Insert — вставка последовательности символов в строковое значение;
  • Replace — замена символа или последовательности символов.

Разберем выполнение основных операций.

Примеры операций со строками в C#

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

Создавать строковые значения можно через тип данных string или с помощью конструкторов.

Пример кода, использующий строковую переменную text и присваивающий ей значение "Hello Gitverse!":

string text = "Hello Gitverse!";

Выполним операцию создания во фрагменте кода следующего типа:

регистр

https://gv01-blog-obs01.obs.ru-moscow-1.hc.sbercloud.ru/imagecd644745f926622433a7bf5f767691f2e65dcf1f.blob
https://gv01-blog-obs01.obs.ru-moscow-1.hc.sbercloud.ru/image237f175ef2d6f8192f760d65b300a1a93f0adba6.blob

Другой вариант создания строкового значения — использование конструктора String. Например, чтобы создать текст, состоящий из пяти символов «A», используем такой синтаксис:

string text1 = new String('A', 5);Этот код создает переменную строкового типа text1 из пяти символов «A».

<no> alt=«Код C#» </no>

Результат выполнения кода:

<no> alt=«Строка в C#» </no>

Конструктор можно использовать для создания массива символов: string text2 = new String(new char[] { 'g', 'i', 't', 'v', 'e', 'r', 's', 'e' });

Запускаем код:

https://gv01-blog-obs01.obs.ru-moscow-1.hc.sbercloud.ru/image0954023ad836d66f31515d6a54c8a496e1a4f7a3.blob
https://gv01-blog-obs01.obs.ru-moscow-1.hc.sbercloud.ru/image0a9fc9b1277c33347be8cb9fae103723c2030f62.blob
https://gv01-blog-obs01.obs.ru-moscow-1.hc.sbercloud.ru/image67aa3b0a0e68d895defe7192eb984069b8fa4292.blob

Результат выполнения:

https://gv01-blog-obs01.obs.ru-moscow-1.hc.sbercloud.ru/image75c428fe8a868c393ad66dad80454eaa5b2605b2.blob

С помощью конструктора можно создать строковое значение из части массива. Для этого нужно задать массив, индекс первого символа и длину , которую требуется извлечь.

Пример:string text3 = new String(new char[] { 'g', 'i', 't', 'v', 'e', 'r', 's', 'e' }, 2, 5);

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

Из массива g, i, t, v, e, r, s, e будет извлечено пять символов начиная с индекса 2 (с символа t).

подстроки

Компиляция кода C#
Компиляция кода C#

Результат:

Конкатенация в C#

В C# можно объединять последовательности символов в одно строковое значение с помощью оператора сложения или метода Concat.

Зададим str1 = "Hello", str2 = "Gitverse!" и сложим их, используя следующий синтаксис: string result = str1 + " " + str2;

Код соединяет значения str1 и str2, результатом должен стать текст «Hello Gitverse!». Проверяем:

Компиляция кода C#
Компиляция кода C#
Компиляция кода C#
Компиляция кода C#

Результат выполнения кода:

Компиляция кода C#
Компиляция кода C#


Теперь используем метод Concat. Зададим str1 = "Hello" и str2 = "Gitverse!" и выполним код со следующим синтаксисом:

string result = string.Concat(str1, " ", str2);

Метод сцепляет строковые представления двух указанных объектов: str1 и str2.

Результат:

Пример конкатенации в C#
Пример конкатенации в C#


Конкатенация в C#
Конкатенация в C#


Пример конкатенации в C#
Пример конкатенации в C#


Использование сложения и метода Concat оправдано для конкатенации небольшого строковых значений. Эти операции не редактируют строковые объекты, а создают новые, что ведет к появлению множества временных элементов и повышенному потреблению ресурсов приложением. 

Для складывания больших объемов строковых данных или при работе с циклами больше подходит класс StringBuilder.

с использованием StringBuilder: StringBuilder sb = new StringBuilder();

sb.Append("Hello"); sb.Append(" Gitverse!"); string result = sb.ToString();

Код создает экземпляр StringBuilder, добавляет к нему два строковых элемента и вызывает метод ToString() для выполнения операции сложения.

Результат конкатенации:

https://gv01-blog-obs01.obs.ru-moscow-1.hc.sbercloud.ru/image5fff820ff3f80616cb048aacc74013682214f2c7.blob

Разделение строки в С#

В C# можно сегментировать строковое значение на две или больше частей по разделителям. Для этого используется метод Split():

string text = "Hello Gitverse!"; string[] words = text.Split(' ');

Разделение строки в C#
Разделение строки в C#


В C# можно сегментировать строковое значение на две или больше частей по разделителям. Для этого используется метод Split():

string text = "Hello Gitverse!"; string[] words = text.Split(' ');

Разделение строки в C#
Разделение строки в C#

Результат:

https://gv01-blog-obs01.obs.ru-moscow-1.hc.sbercloud.ru/imagee9fdc1c286e99578c632f48d43071bd435ace73d.blob

Также можно указать несколько символов для разделения строкового элемента: string text = "Hello,Gitverse!";

string[] words = text.Split(new char[] { ',', '!' });

Разделение строки Split в C#
Разделение строки Split в C#

Результат:

Пример Split в C#
Пример Split в C#

C# сравнивает строковые по значению символов. Реализовать сравнение можно с помощью ==, <, <=, >, >=, методов Equals и Compare.

Оператор == сравнивает два строковых значения по содержимому.

 Зададим str1 = "hello" и str2 = "Gitverse" и применим оператор:

if (str1 == str2) {

// Значения равны

} else {

}Код создает два элемента — str1 и str2 и затем сравнивает их оператором ==.

элементы

операторов

// Значения не равны

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

Теперь рассмотрим применение метода Equals.Зададим значения str1 = "hello" и str2 = "Gitverse". Выполним операцию с Equals:

if (str1.Equals(str2)) {

// Значения равны

} else {

}

https://gv01-blog-obs01.obs.ru-moscow-1.hc.sbercloud.ru/image869ab477de60df9de9623076311c7a9f636a389c.blob

// Значения не равны

Метод Equals в C#
Метод Equals в C#

Заменим переменные:

Результат выполнения кода
Результат выполнения кода
Пример кода с Equals в C#
Пример кода с Equals в C#

Также сравнивать можно с помощью Compare. Метод возвращает значение, указывающее, какая  предшествует в порядке сортировки.

Задаем str1 = "hello" и str2 = "Gitverse". Применяем метод: int result = string.Compare(str1, str2);if (result == 0){

// Строки равны

}else if (result < 0) {

// str1 предшествует str2

} else {

}

https://gv01-blog-obs01.obs.ru-moscow-1.hc.sbercloud.ru/imagea9ef7113951251fe8b43898bfd527a93854b6dcf.blob

// str1 следует за str2

Код сравнивает str1 и str2 с помощью метода Compare, который возвращает значение, указывающее на результат сравнения.

Метод Compare в C#
Метод Compare в C#

Замена символов в строке

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

Replace находит в исходном тексте все вхождения заданного символа или комбинации символов, заменяет их другими заданными символами и возвращает новое строковое значение.

Пример использования метода:string originalString = "Hello, world!";string replacedString = originalString.Replace("world", "Gitverse");

https://gv01-blog-obs01.obs.ru-moscow-1.hc.sbercloud.ru/image261d70a831c3cefa6cc44086792a362757f079bb.blob

Код создает originalString, затем меняет все слова «world» на «Gitverse» с помощью метода Replace.

Метод Replace в C#
Метод Replace в C#

Результат:

Вставка одной строки в другуюФункция Insert добавляет заданные символы в исходный текст перед символом с

указанным индексом.Сделаем из фразы «Сегодня понедельник» фразу «Сегодня не понедельник»:

string originalString = "Сегодня понедельник"; string insertedString = " не";string result = originalString.Insert(7, insertedString);

Запускаем код:

https://gv01-blog-obs01.obs.ru-moscow-1.hc.sbercloud.ru/image84a692c6aa646c7c87f10ea656d1f71b30ebc929.blob
Метод Insert в C#
Метод Insert в C#

Результат исполнения кода:v

Метод Remove принимает индекс начиная с которого будут удалены все символы. Зададим текст text = "Люблю понедельники" и выполним :

int ind = text.Length - 1; text = text.Remove(ind); Console.WriteLine(text);

Этот код удаляет последнюю букву, оставляя фразу «Люблю понедельник». Дополнительно можно ввести параметр количества символов, которые нужно удалить:

text = text.Remove(0, 6);

Console.WriteLine(text);

Этот код удаляет первые шесть символов данной фразы, оставляя одно слово — «понедельник».

Результат выполнения кода:
Результат выполнения кода:
Удаление строк в C#
Удаление строк в C#


Экранирование

Некоторые символы в текстовых фрагментах могут затруднять компиляцию кода. Поэтому при добавлении в текст и спецсимволов определенных типов нужно использовать .

Например, обратный слэш в тексте необходимо экранировать с помощью следующей конструкции: str = "C:\\folder\\file.txt".

Для экранирования двойных кавычек используют обратный слэш: str = "Это \"кавычки\" в строке".