Поделиться через


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

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

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

CompareМетод

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

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

-или-

Первая строка — 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?"));
Dim string1 As String = "Hello World!"
Console.WriteLine(String.Compare(string1, "Hello World?"))

В этом примере -1 отображается на консоли.

Предыдущий пример изначально учитывает культурные особенности. Чтобы выполнить сравнение строк без учета культурных различий, используйте перегрузку метода String.Compare, которая позволяет указать используемую культуру, предоставив параметр культуры. Пример демонстрирующий, как использовать метод 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!"));
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 );
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 для выполнения культурно-зависимых и культурно-независимых сравнений строк, см. в разделе "Выполнение Culture-Insensitive сравнения строк".

EqualsМетод

Метод String.Equals может легко определить, совпадают ли две строки. Этот метод, учитывающий регистр, возвращает значение типа truefalse Boolean. Его можно использовать из существующего класса, как показано в следующем примере. В следующем примере метод используется 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));
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"));
Dim string1 As String = "Hello World!"
Console.WriteLine(string1.StartsWith("Hello"))

В этом примере True отображается на консоли.

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

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'));
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'));
Dim string1 As String = "Hello World!"
Console.WriteLine(string1.LastIndexOf("l"))

В этом примере 9 отображается на консоли.

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

См. также