Строки в C#: методы работы со строками

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

Основные методы работы со строками в C#

Функциональность класса System.String наиболее полно раскрывается через его методы, основными из которых являются следующие:

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

Рассмотрим представленные методы более подробно.

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

Для сравнения двух строк в C# удобно использовать метод Compare.

public static int Compare (string strA, string strB);

Результатом выполнения метода является целое число Int32. Это число означает следующее:

Результат Compare Что означает
Меньше нуля strA предшествует strB в порядке сортировки (стока strA меньше строки strB).
Нуль strA занимает ту же позицию в порядке сортировки, что и объект strB(строки равны)
Больше нуля strA следует за strB в порядке сортировки (стока strA больше строки strB).

Например,

string s1 = "Строка";
string s2 = "Строка";
int res = string.Compare(s1, s2);
Console.WriteLine(res);

Вернет значение 0 так как строки равны.

У класса String есть также несколько перегруженных методов Compare, позволяющих провести настройку способа сравнения строк. Например, можно сравнивать строки, игнорируя регистр:

public static int Compare(String? strA, String? strB, bool ignoreCase);

или определить свои настройки сравнения строк, используя следующий вариант метода Compare:

public static int Compare(String? strA, String? strB, StringComparison comparisonType);

Несмотря на то, что метод Compare по умолчанию предназначен для сравнения строк с учётом локали, используя перегруженные версии метода, можно сравнивать строки и без учёта региональных настроек, например, воспользовавшись вот таким способом:

string.Compare(s1, s2, true, System.Globalization.CultureInfo.InvariantCulture);

Сравнение строк в C# без учёта региональных настроек

Метод CompareOrdinal сравнивает два объекта String, оценивая числовые значения соответствующих объектов Char в каждой строке. Результат выполнения метода такой же, как и у предыдущего метода Compare (см. таблицу выше).

Проверка вхождения подстроки в строку в C#

Метод Containsпроверяет, входит ли заданная подстрока в строку. Этот метод не статический, поэтому использовать его необходимо только после создания объекта, то есть следующим образом:

string s1 = "Строка";
string s2 = "ока";

if (s1.Contains(s2))
{
    Console.WriteLine($"Строка {s1} содержит подстроку {s2}");
}
else
{
    Console.WriteLine($"Строка {s1} не содержит подстроку {s2}");
}

В примере выше мы проверяем содержится ли подстрока "ока" в строке "Строка". Очевидно, что результатом выполнения метода будет true.

Объединение строк в C# (конкатенация строк)

Для объединения строк в C# удобно использовать метод Concat. Этот метод принимает два или более параметров, позволяя объединять не только строки, но и строковые представления любых объектов. Например:

string s1 = "Hello";
string s2 = " world";
string s3 = string.Concat(s1, s2);
Console.WriteLine(s3);

Также возможно объединять и массивы строк:

string[] strArr = new string[3] { "Это", "массив", "строк" };
string s4 = string.Concat(strArr);
Console.WriteLine(s4);

Объединение строк с использованием разделителя в C#

Для того, чтобы объединить несколько строк с использованием заданного разделителе, в C# используется метод Join. В качестве входных параметров метод Join принимает массив или коллекцию строк и символ-разделитель, например:

string[] strArr = new string[3] { "Это", "массив", "строк" };
string s5 = string.Join('|', strArr);
Console.WriteLine(s5);

Для приведенного выше примера в консоли мы получим следующую объединенную строку:

Это|массив|строк

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

Для копирования строк в C# можно воспользоваться не статическим методом CopyTo. Этот метод копирует из строки часть символов, начиная с заданной позиции, и вставляет их в массив символов, также с указанной позиции. Сигнатура метода следующая:

(int sourceIndex, char[] destination, int destinationIndex, int count);

Для того, чтобы продемонстрировать работу метода, воспользуемся следующим примером:

char[] charArr = new char[] { 'H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd' };
string s6 = "string";
s6.CopyTo(2, charArr, 0, 4);
Console.WriteLine(charArr);

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

ringo world

В этом примере из строки s6 копируется 4 символа, начиная с символа с индексом 2 (так как нумерация начинается с нуля, то первый копируемый символ r) и вставляется в массив charArr, начиная с первого элемента (с индексом 0)

Также можно воспользоваться статическим методом Copy для создания полной копии строки:

string s6 = "string";
string s7 = string.Copy(s6);
Console.WriteLine(s7);

Проверка совпадения строк в C#

Достаточно часто при работе со строками приходится проверять вхождение одной подстроки в другую. Для выполнения проверки совпадения строк и подстрок в C# можно воспользоваться двумя методами:

public bool EndsWith(String value);
public bool StartsWith(String value);

Первый метод (EndWith) проверяет заканчивается ли проверяемая строка подстрокой value, а второй, соответственно, проводит проверку на наличие подстроки value в начале строки. Оба метода имеют перегрузки. Пример:

string s6 = "string";
if (s6.StartsWith("str"))
    Console.WriteLine("Найдено совпадение подстроки \"str\" в начале строки");
if (s6.EndsWith("ing"))
    Console.WriteLine("Найдено совпадение подстроки \"ing\" в конце строки");

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

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

double value = 7.123456789;
double value2 = 7.12;
string s8 = string.Format("Строка для форматирования. Первое число {0},  второе число {1}", value, value2);
Console.WriteLine(s8);

Результатом будет следующая строка:

Строка для форматирования. Первое число 7,123456789, второе число 7,12

Поиск в строках C#

Ещё одной частой задачей при работе со строками в C# является поиск символов и подстрок в строках. Поиск в строке можно осуществить, в том числе, с использованием метода IndexOf, имеющего несколько перегрузок:

public int IndexOf(String value, StringComparison comparisonType);
public int IndexOf(String value, int startIndex, StringComparison comparisonType);
public int IndexOf(String value, int startIndex, int count, StringComparison comparisonType);
public int IndexOf(String value, int startIndex, int count);
public int IndexOf(String value);
public int IndexOf(char value, StringComparison comparisonType);
public int IndexOf(char value, int startIndex, int count);
public int IndexOf(char value, int startIndex);
public int IndexOf(char value);

Этот метод возвращает индекс первого вхождения указанного символа или подстроки в строку. Например,

string s9 = "Строка для поиска символов и подстрок";
int index = s9.IndexOf("о");
if (index > -1)
    Console.WriteLine("Индекс первого вхождения символа в строку {0}", index);
index = s9.IndexOf("сим");
if (index > -1)
    Console.WriteLine("Индекс первого символа искомой подстроки {0}", index);

Результатом выполнения будут следующие строки в консоли:

Индекс первого вхождения символа в строку 3

Индекс первого символа искомой подстроки 18

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

public int LastIndexOf(char value, int startIndex, int count);
public int LastIndexOf(char value, int startIndex);
public int LastIndexOf(String value, StringComparison comparisonType);
public int LastIndexOf(String value, int startIndex, StringComparison comparisonType);
public int LastIndexOf(char value);
public int LastIndexOf(String value, int startIndex, int count);
public int LastIndexOf(String value, int startIndex);
public int LastIndexOf(String value);
public int LastIndexOf(String value, int startIndex, int count, StringComparison comparisonType);

Вставка подстроки в строку C#

Для вставки одной строки в другую в C# можно воспользоваться методом Insert:

public String Insert(int startIndex, String value);

Этот метод вставляет в строку, начиная с индекса startIndex подстроку value и возвращает в результате новый экземпляр строки. Например,

string s10 = "Hello ";
string s11 = s10.Insert(6, "world");
Console.WriteLine(s11);

Результат

Hello world

Замена символов и подстрок в строках C#

Для замены символов и подстрок в строках C# используется метод Replace:

public String Replace(char oldChar, char newChar);
public String Replace(String oldValue, String? newValue);
public String Replace(String oldValue, String? newValue, bool ignoreCase, CultureInfo? culture);
public String Replace(String oldValue, String? newValue, StringComparison comparisonType);

Например, заменим все символы o с строке на символы А:

string s12 = "Исходная строка для замены всех символов о на символы А";
string s13 = s12.Replace('о', 'А');
Console.WriteLine(s13);

Результат

ИсхАдная стрАка для замены всех симвАлАв А на симвАлы А

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

Разделение строк на подстроки в C# также является достаточно частой задачей в программировании. Для этого можно воспользоваться методом Split

public String[] Split(String[]? separator, int count, StringSplitOptions options);
public String[] Split(String? separator, int count, StringSplitOptions options = StringSplitOptions.None);
public String[] Split(String[]? separator, StringSplitOptions options);
public String[] Split(char[]? separator, int count, StringSplitOptions options);
public String[] Split(String? separator, StringSplitOptions options = StringSplitOptions.None);
public String[] Split(char[]? separator, StringSplitOptions options);
public String[] Split(char separator, StringSplitOptions options = StringSplitOptions.None);
public String[] Split(params char[]? separator);
public String[] Split(char[]? separator, int count);
public String[] Split(char separator, int count, StringSplitOptions options = StringSplitOptions.None);

В качестве параметров метод Split принимает один или несколько символов (Char), используемых в качестве разделителя, а на выходе возвращает массив строк.  Рассмотрим работу метода Split на примере

string s14 = "Эта строка, которая будет разделена на подстроки с использованием двух разделителей";
string[] res = s14.Split(new char[] { ' ', ',' });
foreach (string s in res)
{
    Console.WriteLine(s);
}

Здесь в качестве разделителей мы используем два символа — пробел и запятую. Результатом выполнения кода будет следующий вывод в консоли:

Эта

строка

которая

будет

разделена

на

подстроки

с

использованием

двух

разделителей

Извлечение подстрок из строки в C#

Для извлечения подстрок из строки используется метод Substring:

public String Substring(int startIndex);
public String Substring(int startIndex, int length);

При использовании первого варианта метода (с одним параметром) из строки извлекается подстрока, начинающаяся с индекса startIndex и, при этом, извлечение происходит до конца строки. Во втором случае подстрока извлекается также, начиная с индекса startIndex, однако длина извлекаемой подстроки ограничивается вторым параметром — length.

Пример использования метода представлен ниже:

string s15 = "hello world";
string s16 = s15.Substring(6);
string s17 = s15.Substring(7, 3);
Console.WriteLine(s16);
Console.WriteLine(s17);

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

world

orl

Изменение регистра строк в C#

Для изменения регистра символов в строке в C# можно воспользоваться двумя методами:

public String ToLower();
public String ToLower(CultureInfo? culture);
public String ToUpper();
public String ToUpper(CultureInfo? culture);

Метод ToLower меняет регистр всех символов в строке на нижний, а метод ToUpper,  напротив — меняет регистр всех символов в строке на верхний. Пример

string s15 = "HelLo World";
string s16 = s15.ToLower();
string s17 = s15.ToUpper();
Console.WriteLine(s16);
Console.WriteLine(s17);

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

hello world

HELLO WORLD

Обрезка строк в C#

Иногда требуется избавиться в строке от лишних символов в начале, в конце или одновременно и вначале и в конце. «Лишними» могут быть как обычные проблелы, так и прочие символы. Для обрезки строки в C# можно воспользоваться методами Trim*:

public String Trim();
public String Trim(char trimChar);
public String Trim(params char[]? trimChars);
public String TrimEnd(char trimChar);
public String TrimEnd(params char[]? trimChars);
public String TrimStart();
public String TrimStart(char trimChar);
public String TrimStart(params char[]? trimChars);

По названию метода можно понять смысл его работы. Так, если используется метод Trim(), то обрезка строки происходит и сначала и с конца, если же используется TrimEnd(), то строка обрезается только с конца. При этом, если используется версия метода без параметров, то из строки удаляются лидирующие или замыкающие пробелы, иначе — определенные в параметрах метода символы. Например,

string s15 = " HelLo World ";
string s16 = s15.Trim(); //обрезаем пробелы
string s17 = s16.Trim(new char[] {'H', 'd'}); //обрезаем заданные символы
Console.WriteLine(s16);
Console.WriteLine(s17);

Итого

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

 

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии