Сравнение строк в .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
методу, чтобы удалить символ или слово, начинающееся с этого символа.
См. также
- Рекомендации по использованию строк в .NET
- Базовые операции со строками
- Выполнение нечувствительных строковых операций с языком и региональных параметров
- Сортировка таблиц веса, используемая платформа .NET Framework и .NET Core 1.0-3.1 в Windows
- Таблица элементов сортировки Юникода по умолчанию используется .NET 5 на всех платформах и .NET Core в Linux и macOS