Содержание
- Основные методы работы со строками в C#
- Сравнение строк в C#
- Сравнение строк в C# без учёта региональных настроек
- Проверка вхождения подстроки в строку в C#
- Объединение строк в C# (конкатенация строк)
- Объединение строк с использованием разделителя в C#
- Копирование строк в C#
- Проверка совпадения строк в C#
- Форматирование строк в C#
- Поиск в строках C#
- Вставка подстроки в строку C#
- Замена символов и подстрок в строках C#
- Разделение строк на подстроки в C#
- Извлечение подстрок из строки в C#
- Изменение регистра строк в C#
- Обрезка строк в 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);
в результате выполнения мы получим следующий вывод в консоли:
В этом примере из строки 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);
Результатом будет следующая строка:
Поиск в строках 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);
Результатом выполнения будут следующие строки в консоли:
Индекс первого символа искомой подстроки 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);
Результат
Замена символов и подстрок в строках 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);
Результат выполнения
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
Обрезка строк в 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#. Конечно, работа со строками не ограничивается исключительно рассмотренными выше методами, однако, для начала работы нам этого будет достаточно. В дальнейшем мы рассмотрим также отдельно вопросы по форматированию строк, использование интерполяции строк и так далее.