Урок 21. Функции сравнения строк C#
Все уроки по C# расположены здесь.
21-я часть учебника по основам языка C# продолжает изучение функциональности управления строками, предоставляемой классом String. В данной статье рассматриваются методы, доступные для сравнения содержимого строк.
Операторы равенства и неравенства
В более ранней части учебника по основам C# мы обсуждали равенство ( == ) и неравенство (!=) - реляционные операторы. Эти операторы позволяют производить точное сравнение двух строк с учетом регистра. В случае оператора равенства, если строки совпадают, результирующее логическое значение равно true. Если они отличаются, результат будет false. Оператор неравенства возвращает противоположный результат, как показано ниже:
string s1 = "строка Для сравнения."; string s2 = "строка Для сравнения."; string s3 = "строка Для Сравнения."; // Обратите внимание на заглавную "с" result bool ; result = С1 == С2; // result = rue result = С1 == С3; // result = false result = С1 != s2; // result = false result = С1 != s3; // result = trueЭти операторы полезны, но имеют ограничения. Они не позволяют вам рассматривать равенство двух строк, которые совпадают во всех, кроме регистра символов, к примеру. Они также не позволяют определить, что одна строка больше другой. В этой статье описываются методы, которые предоставляются для решения данных проблем.
Относительное сравнение
Метод CompareTo
Платформа .NET framework предоставляет метод CompareTo для многих типов данных, включая строки. Он позволяет сравнивать два значения и возвращает результат, который указывает не только на то, равны ли они, но и на то, что больше, когда они не равны. Метод учитывает и другую информацию при сравнении строк. Например, японские символы катаканы могут быть написаны двумя способами: в половину ширины или в полную ширину. Метод CompareTo считает, что символы, записанные как полная ширина, равны тем же символам половины ширины. Та же культурная информация используется для определения того, какая строка больше.
Метод CompareTo работает с существующей строкой. Строка, с которой она будет сравниваться, передается параметру. Метод возвращает целое число, обозначающее результат сравнения следующим образом:
Это можно уточнить на примере:
string animal1 = "Cat"; string animal2 = "Dog"; int result; result = animal1.CompareTo("Cat"); // результат равен нулю result = animal2.CompareTo("Cat"); // результат больше нуля result = animal1.CompareTo(animal2); // результат меньше нуляПримечание: поскольку этот метод вызывается для существующего экземпляра string, то если строка имеет значение null, возникает исключение:
string animal = null; int result; result = animal.CompareTo("Cat"); // вызывает исключениеМетод Compare
Функция Compare является статическим методом класса string. Он предоставляет аналогичную функциональность CompareTo, но позволяет указать больше опций. В качестве статического члена класса string обе строки передаются в качестве параметров.
строка animal1 = "Cat"; строки animal2 = "Dog"; int result; result = String.Compare(animal1, "Cat"); // результат равен нулю result = String.Compare(animal2, "Cat"); // результат больше нуля result = String.Compare(animal1, animal2); // результат меньше нуляСравнение значений Null
Метод CompareTo вызывает исключение, если проверяемая строка имеет значение null, так как объект null не имеет доступных методов. Однако, поскольку метод Compare статичен, можно сравнивать пустые строки.
string animal = "Cat"; int result; result = String.Compare(animal, null); // результат больше нуля result = String.Compare(null, animal); // результат меньше нуля result = String.Compare(null, null); // результат равен нулюЧувствительность к регистру
Метод Compare позволяет вам решать, выполнять ли сравнения с учетом регистра или без учета регистра. Различия между прописными и строчными буквами применяются в соответствии с настройками языка пользователя. Чтобы определить, следует ли использовать сравнение с учетом регистра, используется третий логический параметр. Если значение true, регистры игнорируются. Если false, то эффект будет таким же, как и отсутствие параметра вообще.
Этот пример предполагает английские настройки:
строка animal1 = "Cat"; строки animal2 = "cat"; // обратите внимание на нижний регистр int result; result = String.Compare(animal1, animal2, true); // строки равны result = String.Compare(animal1, animal2, false);// строки не равныМетод Compare включает в себя перегруженные версии, позволяющие сравнивать строки с использованием дополнительных настроек международного языка, а также опции сравнения частей строк. Они выходят за рамки этого учебника, но их стоит изучить. Дополнительные сведения можно найти в MSDN.
Метод CompareOrdinal
Статический метод Compareordinal позволяет производить сравнение двух строк с учетом регистра. Он отличается от Compare тем, что result сравнения основан на числовых значениях Юникода для каждого символа. Поскольку важность символов в культурном контексте может отличаться от фиксированного числового порядка Юникода, при сравнении с использованием этого метода могут быть получены различные результаты. Это показано в следующем примере, который предполагает английскую конфигурацию Великобритании:
string animal1 = "Cat"; string animal2 = "cat";// обратите внимание на нижний регистр int result; result = String.Compare(animal1, animal2, true); // результат больше нуля result = String.Compare(animal1, animal2, false); // результат меньше нуляМетод Equals
Ну и рассмотрим метод Equals для полноты урока. Он возвращает логический result, указывающий, совпадают ли две строки, подобно оператору равенства (==). Метод может использоваться для объекта string с одним параметром или в качестве статического члена с двумя параметрами для сравниваемых строк.
string animal = "Cat"; bool result; result = animal.Equals("Cat"); // result = true result = animal.Equals("cat"); // result = false result = String.Equals(animal, "Cat"); // result = true result = String.Equals(animal, "cat"); // result = falseМетод IsNullOrEmpty .NET 2.0
Иногда необходимо проверить, является ли строка пустой или неопределенной (null). При использовании .NET 1.1 для этого потребуется два теста. В .NET framework 2.0 появился новый статический метод isnullorempty, который выполняет оба теста с помощью одной инструкции. Метод возвращает true, если строка пустая или null.
string animal1 = "Cat"; string animal2 = ""; string animal3 = null; bool result; result = String.IsNullOrEmpty(animal1); // result = false result = String.IsNullOrEmpty(animal2); // result = true result = String.IsNullOrEmpty(animal3); // result = true
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Читайте также:
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.