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

Платформа .NET обеспечивает несколько методов для сравнения значений строк. В таблице ниже перечислены и описаны методы сравнения значений.

Имя метода Использование
String.Compare Сравнивает значения двух строк. Возвращает целочисленное значение.
String.CompareOrdinal Сравнивает две строки без учета локального языка и региональных параметров. Возвращает целочисленное значение.
String.CompareTo Сравнивает текущий строковый объект с другой строкой. Возвращает целочисленное значение.
String.StartsWith Определяет, начинается ли строка с переданной строки. Возвращает логическое значение.
String.EndsWith Определяет, заканчивается ли строка переданной строкой. Возвращает логическое значение.
String.Contains Определяет, встречается ли символ или строка в другой строке. Возвращает логическое значение.
String.Equals Определяет, совпадают ли две строки. Возвращает логическое значение.
String.IndexOf Возвращает индекс позиции символа или строки начиная с начала проверяемой строки. Возвращает целочисленное значение.
String.LastIndexOf Возвращает индекс позиции символа или строки начиная с конца проверяемой строки. Возвращает целочисленное значение.

CompareМетод

Статический метод String.Compare позволяет тщательно сравнивать две строки. Этот метод учитывает язык и региональные параметры. Эту функцию можно использовать для сравнения двух строк или подстрок двух строк. Кроме того, имеются перегруженные методы, которые учитывают или не учитывают регистр и вариативность языка и региональных параметров. В таблице ниже приведены три целочисленных значения, которые может возвращать этот метод.

Возвращаемое значение Condition
Отрицательное целое число Первая строка предшествует второй в порядке сортировки.

–или–

Первая строка имеет значение null.
0 Первая и вторая строка равны.

–или–

Обе строки имеют значение null.
Положительное целое число

–или–

1
Первая строка следует за второй в порядке сортировки.

–или–

Вторая строка имеет значение null.

Внимание

Метод String.Compare в основном предназначен для использования при упорядочивании или сортировке строк. Не следует использовать метод String.Compare для проверки на равенство (то есть для явного поиска возвращаемого значения 0 без учета того, является ли одна строка меньше или больше другой). Для определения равенства двух строк используйте метод String.Equals(String, String, StringComparison) .

В примере ниже метод String.Compare используется для определения относительных значений двух строк.

String^ string1 = "Hello World!";
Console::WriteLine(String::Compare(string1, "Hello World?"));
string string1 = "Hello World!";
Console.WriteLine(String.Compare(string1, "Hello World?"));
Dim string1 As String = "Hello World!"
Console.WriteLine(String.Compare(string1, "Hello World?"))

Этот пример выводит на консоль значение -1 .

В предыдущем примере по умолчанию учитывается язык и региональные параметры. Для сравнения строк без учета языка и региональных параметров используйте перегрузку метода String.Compare, которая позволяет указать язык и региональные параметры с помощью параметра culture. См. пример, демонстрирующий использование метода String.Compare для сравнения строк без учета языка и региональных параметров.

CompareOrdinalМетод

Метод String.CompareOrdinal сравнивает два строковых объекта без учета локального языка и региональных параметров. Возвращаемые этим методом значения идентичны значениям, возвращаемым методом Compare в предыдущей таблице.

Внимание

Метод String.CompareOrdinal в основном предназначен для использования при упорядочивании или сортировке строк. Не следует использовать метод String.CompareOrdinal для проверки на равенство (то есть для явного поиска возвращаемого значения 0 без учета того, является ли одна строка меньше или больше другой). Для определения равенства двух строк используйте метод String.Equals(String, String, StringComparison) .

В примере ниже метод CompareOrdinal используется для сравнения значений двух строк.

String^ string1 = "Hello World!";
Console::WriteLine(String::CompareOrdinal(string1, "hello world!"));
string string1 = "Hello World!";
Console.WriteLine(String.CompareOrdinal(string1, "hello world!"));
Dim string1 As String = "Hello World!"
Console.WriteLine(String.CompareOrdinal(string1, "hello world!"))

Этот пример выводит на консоль значение -32 .

CompareToМетод

Метод String.CompareTo сравнивает строку, которую инкапсулирует текущий строковый объект, с другой строкой или объектом. Возвращаемые этим методом значения идентичны значениям, возвращаемым методом String.Compare в предыдущей таблице.

Внимание

Метод String.CompareTo в основном предназначен для использования при упорядочивании или сортировке строк. Не следует использовать метод String.CompareTo для проверки на равенство (то есть для явного поиска возвращаемого значения 0 без учета того, является ли одна строка меньше или больше другой). Для определения равенства двух строк используйте метод String.Equals(String, String, StringComparison) .

В примере ниже метод String.CompareTo используется для сравнения объекта string1 с объектом string2 .

String^ string1 = "Hello World";
String^ string2 = "Hello World!";
int MyInt = string1->CompareTo(string2);
Console::WriteLine( MyInt );
string string1 = "Hello World";
string string2 = "Hello World!";
int MyInt = string1.CompareTo(string2);
Console.WriteLine( MyInt );
Dim string1 As String = "Hello World"
Dim string2 As String = "Hello World!"
Dim MyInt As Integer = string1.CompareTo(string2)
Console.WriteLine(MyInt)

Этот пример выводит на консоль значение -1 .

Все перегрузки метода String.CompareTo по умолчанию выполняют сравнение с учетом языка и региональных параметров и регистра. У этого метода нет перегрузок, позволяющих выполнять сравнение без учета языка и региональных параметров. Для ясности кода рекомендуется использовать String.Compare метод вместо этого, указывая CultureInfo.CurrentCulture для операций с учетом языка и региональных параметров или CultureInfo.InvariantCulture для нечувствительных операций с языком и региональных параметров. Примеры, демонстрирующие использование String.Compare метода для выполнения сравнения нечувствительных строк с учетом языка и региональных параметров, см. в разделе "Выполнение нечувствительных строк и региональных параметров".

EqualsМетод

Метод String.Equals может легко определить, совпадают ли две строки. Этот метод учитывает регистр и возвращает логическое значение true или false. Метод можно вызывать из существующего класса, как показано в следующем примере. В примере ниже метод Equals используется для определения того, содержит ли строковый объект фразу "Hello World".

String^ string1 = "Hello World";
Console::WriteLine(string1->Equals("Hello World"));
string string1 = "Hello World";
Console.WriteLine(string1.Equals("Hello World"));
Dim string1 As String = "Hello World"
Console.WriteLine(string1.Equals("Hello World"))

Этот пример выводит на консоль значение True .

Этот метод также можно использовать как статический. В примере ниже два строковых объекта сравниваются с помощью статического метода.

String^ string1 = "Hello World";
String^ string2 = "Hello World";
Console::WriteLine(String::Equals(string1, string2));
string string1 = "Hello World";
string string2 = "Hello World";
Console.WriteLine(String.Equals(string1, string2));
Dim string1 As String = "Hello World"
Dim string2 As String = "Hello World"
Console.WriteLine(String.Equals(string1, string2))

Этот пример выводит на консоль значение True .

Методы StartsWith и EndsWith

Метод можно использовать String.StartsWith для определения того, начинается ли строковый объект с теми же символами, которые охватывают другую строку. Этот метод учитывает регистр и возвращает значение true, если текущий строковый объект начинается с переданной строки, и значение false в противном случае. В примере ниже этот метод используется для определения того, начинается ли строковый объект со слова "Hello".

String^ string1 = "Hello World";
Console::WriteLine(string1->StartsWith("Hello"));
string string1 = "Hello World";
Console.WriteLine(string1.StartsWith("Hello"));
Dim string1 As String = "Hello World!"
Console.WriteLine(string1.StartsWith("Hello"))

Этот пример выводит на консоль значение True .

Метод String.EndsWith сравнивает переданную строку с символами, существующими в конце текущего объекта строки. Он также возвращает логическое значение. В примере ниже конец строки проверяется с помощью метода EndsWith.

String^ string1 = "Hello World";
Console::WriteLine(string1->EndsWith("Hello"));
string string1 = "Hello World";
Console.WriteLine(string1.EndsWith("Hello"));
Dim string1 As String = "Hello World!"
Console.WriteLine(string1.EndsWith("Hello"))

Этот пример выводит на консоль значение False .

Методы IndexOf и LastIndexOf

Метод можно использовать String.IndexOf для определения положения первого вхождения определенного символа в строке. Этот метод учитывает регистр и начинает отсчет с начала строки. Он возвращает позицию переданного символа, используя отсчитываемый от нуля индекс. Если символ не удается найти, возвращается значение –1.

В примере ниже метод IndexOf используется для поиска первого вхождения символа "l" в строку.

String^ string1 = "Hello World";
Console::WriteLine(string1->IndexOf('l'));
string string1 = "Hello World";
Console.WriteLine(string1.IndexOf('l'));
Dim string1 As String = "Hello World!"
Console.WriteLine(string1.IndexOf("l"))

Этот пример выводит на консоль значение 2 .

Метод String.LastIndexOf аналогичен методу String.IndexOf за исключением того, что он возвращает позицию последнего вхождения конкретного символа в строку. Он учитывает регистр и использует отсчитываемый от нуля индекс.

В примере ниже метод LastIndexOf используется для поиска последнего вхождения символа "l" в строку.

String^ string1 = "Hello World";
Console::WriteLine(string1->LastIndexOf('l'));
string string1 = "Hello World";
Console.WriteLine(string1.LastIndexOf('l'));
Dim string1 As String = "Hello World!"
Console.WriteLine(string1.LastIndexOf("l"))

Этот пример выводит на консоль значение 9 .

Оба метода полезны при использовании в сочетании с методом String.Remove . Вы можете использовать методы IndexOf или LastIndexOf методы для получения позиции символа, а затем предоставить эту позицию Remove методу, чтобы удалить символ или слово, начинающееся с этого символа.

См. также