Рейтинговые книги
Читем онлайн C# 4.0: полное руководство - Герберт Шилдт

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 214 215 216 217 218 219 220 221 222 ... 294

public static bool Equals(string a, string b) - Возвращает логическое значение true, если строка а содержит ту же последовательность символов, что и строка b. Выполняется порядковое сравнение с учетом регистра, но без учета культурной среды

public static bool Equals(string a, string b, StringComparison comparisonType) - Возвращает логическое значение true, если строка а содержит ту же последовательность символов, что и строка b. Параметр comparisonType определяет конкретный способ

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

Тип StringComparison представляет собой перечисление, в котором определяются значения, приведенные в табл.22.2. Используя эти значения, можно организовать сравнение строк, удовлетворяющее потребностям конкретного приложения. Следовательно, добавление параметра типа StringComparison расширяет возможности метода Compare() и других методов сравнения, например, Equals(). Это дает также возможность однозначно указывать способ предполагаемого сравнения строк. В силу имеющих отличий между сравнением строк с учетом культурной среды и порядковым сравнением очень важно быть предельно точным в этом отношении. Именно по этой причине в примерах программ, приведенных в данной книге, параметр типа StringComparison явно указывается в вызовах тех методов, в которых он поддерживается.

Таблица 22.2. Значения, определяемые в перечислении StringComparison

Значение - Описание

CurrentCulture - Сравнение строк производится с использованием текущих настроек параметров культурной среды

CurrentCultureIgnoreCase - Сравнение строк производится с использованием текущих настроек параметров культурной среды, но без учета регистра

InvariantCulture - Сравнение строк производится с использованием неизменяемых, т.е. универсальных данных о культурной среде

InvariantCulturelngoreCase - Сравнение строк производится с использованием не изменяемых, т.е. универсальных данных о культурной среде и без учета регистра

Ordinal - Сравнение строк производится с использованием порядковых значений символов в строке. При этом лексикографический порядок может нарушиться, а условные обозначения, принятые в отдельной культурной среде, игнорируются

OrdinalIgnoreCase - Сравнение строк производится с использованием порядковых значений символов в строке, но без учета регистра. При этом лексикографический порядок может нарушиться, а условные обозначения, принятые в отдельной культурной среде, игнорируются

В любом случае метод Compare() возвращает отрицательное значение, если первая сравниваемая строка оказывается меньше второй; положительное значение, если первая сравниваемая строка больше второй; и наконец, нуль, если обе сравниваемые строки равны. Несмотря на то что метод Compare() возвращает нуль, если сравниваемые строки равны, для определения равенства символьных строк, как правило, лучше пользоваться методом Equals() или же оператором ==. Дело в том, что метод Compare() определяет равенство сравниваемых строк на основании порядка их сортировки. Так, если выполняется сравнение строк с учетом культурной среды, то обе строки могут оказаться одинаковыми по порядку их сортировки, но не равными по существу. По умолчанию равенство строк определяется в методе Equals(), исходя из порядковых значений символов и без учета культурной среды. Следовательно, по умолчанию обе строки сравниваются в этом методе на абсолютное, посимвольное равенство подобно тому, как это делается в операторе ==.

Несмотря на большую универсальность метода Compare(), для простого порядкового сравнения символьных строк проще пользоваться методом CompareOrdinal(). И наконец, следует иметь в виду, что метод CompareTo() выполняет сравнение строк только с учетом культурной среды. На момент написания этой книги отсутствовали перегружаемые варианты этого метода, позволявшие указывать другой способ сравнения символьных строк.

В приведенной ниже программе демонстрируется применение методов Compare(), Equals(), CompareOrdinal(), а также операторов == и != для сравнения символьных строк. Обратите внимание на то, что два первых примера сравнения наглядно демонстрируют отличия между сравнением строк с учетом культурной среды и порядковым сравнением в англоязычной среде.

// Продемонстрировать разные способы сравнения символьных строк.

using System;

class CompareDemo {

  static void Main() {

    string str1 = "alpha";

    string str2 = "Alpha";

    string str3 = "Beta";

    string str4 = "alpha";

    string str5 = "alpha, beta";

    int result;

    // Сначала продемонстрировать отличия между сравнением строк

    // с учетом культурной среды и порядковым сравнением.

    result = String.Compare(str1, str2, StringComparison.CurrentCulture);

    Console.Write("Сравнение строк с учетом культурной среды: ");

    if (result < 0)

      Console.WriteLine(str1 + " меньше " + str2);

    else if (result > 0)

      Console.WriteLine(str1 + " больше " + str2);

    else

      Console.WriteLine(str1 + " равно " + str2);

    result = String.Compare(str1, str2, StringComparison.Ordinal);

    Console.Write("Порядковое сравнение строк: ");

    if (result < 0)

      Console.WriteLine(str1 + " меньше " + str2);

    else if (result > 0)

      Console.WriteLine(str1 + " больше " + str2);

    else

      Console.WriteLine(str1 + " равно " + str4);

    // Использовать метод CompareOrdinal().

    result = String.CompareOrdinal(str1, str2);

    Console.Write("Сравнение строк методом CompareOrdinal():n");

    if (result < 0)

      Console.WriteLine(str1 + " меньше " + str2);

    else if (result > 0)

      Console.WriteLine(str1 + " больше " + str2);

    else

      Console.WriteLine(str1 + " равно " + str4);

    Console.WriteLine();

    // Определить равенство строк с помощью оператора == .

    // Это порядковое сравнение символьных строк,

    if (str1 == str4)

      Console.WriteLine(str1 + " == " + str4);

    // Определить неравенство строк с помощью оператора !=.

    if (str1 != str3)

      Console.WriteLine(str1 + " != " + str3);

    if (str1 != str2)

      Console.WriteLine(str1 + " != " + str2);

    Console.WriteLine();

    // Выполнить порядковое сравнение строк без учета регистра,

    // используя метод Equals().

    if (String.Equals(str1, str2, StringComparison.OrdinalIgnoreCase))

      Console.WriteLine("Сравнение строк методом Equals() с "

              + "параметром OrdinallgnoreCase:n"

              + str1 + " равно " + str2);

    Console.WriteLine();

    // Сравнить части строк,

    if (String.Compare(str2, 0, str5, 0, 3,

               StringComparison.CurrentCulture) > 0) {

      Console.WriteLine("Сравнение строк с учетом текущей культурной среды:"

             + "3 первых символа строки " + str2 +

             " больше, чем 3 первых символа строки " + str5);

    }

  }

}

Выполнение этой программы приводит к следующему результату.

Сравнение строк с учетом культурной среды: alpha меньше Alpha

Порядковое сравнение строк: alpha больше Alpha

Сравнение строк методом CompareOrdinal(): alpha больше Alpha

alpha == alpha

alpha != Beta

alpha != Alpha

Сравнение строк методом Equals() с параметром OrdinallgnoreCase: alpha равно Alpha

Сравнение строк с учетом текущей культурной среды:

3 первых символа строки Alpha больше, чем 3 первых символа строки alpha, beta

Сцепление строк

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

1 ... 214 215 216 217 218 219 220 221 222 ... 294
На этой странице вы можете бесплатно читать книгу C# 4.0: полное руководство - Герберт Шилдт бесплатно.
Похожие на C# 4.0: полное руководство - Герберт Шилдт книги

Оставить комментарий