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

Обновлен: Ноябрь 2007

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

Название метода

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

String.Compare

Сравнение значений двух строк. Возвращает целое значение.

String.CompareOrdinal

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

String.CompareTo

Сравнение текущего строкового объекта с другой строкой. Возвращает целое значение.

String.StartsWith

Определение того, начинается ли строка с переданной строки. Возвращает логическое значение.

String.EndsWith

Определение того, заканчивается ли строка переданной строкой. Возвращает логическое значение.

String.Equals

Определение совпадения строк. Возвращает логическое значение.

String.IndexOf

Определение индекса позиции знака или строки, начиная с начала проверяемой строки. Возвращает целое значение.

String.LastIndexOf

Определение индекса позиции знака или строки, начиная с конца проверяемой строки. Возвращает целое значение.

Compare

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

Тип значения

Условие

Отрицательное целое число

strA меньше strB.

0

strA равна strB.

Положительное целое число

либо

1

Этот экземпляр больше value.

либо

value является пустой ссылкой (Nothing в Visual Basic).

fbh501kz.alert_caution(ru-ru,VS.90).gifВажное примечание.

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

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

Dim MyString As String = "Hello World!"
Console.WriteLine([String].Compare(MyString, "Hello World?"))
string MyString = "Hello World!";      
Console.WriteLine(String.Compare(MyString, "Hello World?"));

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

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

CompareOrdinal

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

fbh501kz.alert_caution(ru-ru,VS.90).gifВажное примечание.

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

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

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

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

CompareTo

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

fbh501kz.alert_caution(ru-ru,VS.90).gifВажное примечание.

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

В следующем примере метод CompareTo используется для сравнения объекта MyString с объектом OtherString.

Dim MyString As String = "Hello World"
Dim OtherString As String = "Hello World!"
Dim MyInt As Integer = MyString.CompareTo(OtherString)
Console.WriteLine(MyInt)
String MyString = "Hello World";
String OtherString = "Hello World!";
int MyInt = MyString.CompareTo(OtherString);    
Console.WriteLine( MyInt );

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

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

Equals

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

Dim MyString As String = "Hello World"
Console.WriteLine(MyString.Equals("Hello World"))
string MyString = "Hello World";
Console.WriteLine(MyString.Equals("Hello World"));

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

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

Dim MyString As String = "Hello World"
Dim YourString As String = "Hello World"
Console.WriteLine(String.Equals(MyString, YourString))
string MyString = "Hello World";
string YourString = "Hello World";
Console.WriteLine(String.Equals(MyString, YourString));

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

StartsWith и EndsWith

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

Dim MyString As String = "Hello World"
Console.WriteLine(MyString.StartsWith("Hello"))
string MyString = "Hello World";
Console.WriteLine(MyString.StartsWith("Hello"));

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

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

Dim MyString As String = "Hello World"
Console.WriteLine(MyString.EndsWith("Hello"))
string MyString = "Hello World";    
Console.WriteLine(MyString.EndsWith("Hello"));

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

IndexOf и LastIndexOf

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

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

Dim MyString As String = "Hello World"
Console.WriteLine(MyString.IndexOf("l"c))
string MyString = "Hello World";
Console.WriteLine(MyString.IndexOf('l'));

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

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

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

Dim MyString As String = "Hello World"
Console.WriteLine(MyString.LastIndexOf("l"c))
string MyString = "Hello World";    
Console.WriteLine(MyString.LastIndexOf('l'));

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

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

См. также

Другие ресурсы

Основные операции со строками

Выполнение строковых операций, не зависящих от языка и региональных параметров