Главная страница

программирование. Руководство su P# a n Reference в herbert schildt полное руководство с 0 герберт шилдт


Скачать 3.32 Mb.
НазваниеРуководство su P# a n Reference в herbert schildt полное руководство с 0 герберт шилдт
Анкорпрограммирование
Дата25.01.2022
Размер3.32 Mb.
Формат файлаrtf
Имя файлаc-40-polnoe-rukovodstvo-2011.rtf
ТипРуководство
#341448
страница67 из 97
1   ...   63   64   65   66   67   68   69   70   ...   97

public static int
Сравнивает части строк strA и strB , используя инфор
Compare(string
мацию о культурной среде, определяемую параметром
strA, int indexA,
culture. Сравнение начинается со строковых элементов
string strB, int
strA[indexA] и strB[indexB] и включает количество
indexB, int length,
символов, определяемых параметром length. Метод воз
bool ignoreCase,
вращает положительное значение, если часть строки strA
Culturelnfo culture)
больше части строки strB ; отрицательное значение, если часть строки strA меньше части строки strB ; и нуль, если сравниваемые части строк strA и strB равны. Если параметр ignoreCase принимает логическое значение true, то при сравнении не учитываются различия между прописным и строчным вариантами букв. В противном случае эти различия учитываются. Класс Culturelnfo определен в пространстве имен System.Globalization
_ Продолжение табл. 22.1
Метод
Назначение
public static int
Сравнивает строку strA со строкой strB , используя ин
Compare(string
формацию о культурной среде, обозначаемую параметром
strAf string strB,
culture, а также варианты сравнения, передаваемые в ка
Culturelnfo culture,
честве параметра options. Возвращает положительное зна
CompareOptions
чение, если строка strA больше строки strB ; отрицательное
options)
значение, если строка strA меньше строки strB ; и нуль, если строки strA и strB равны. Классы Culturelnfo и CompareOptions определены в пространстве имен

System.Globalization
public static int
Сравнивает части строк strA и strB , используя информацию
Compare(string
о культурной среде, обозначаемую параметром culture,
strA, int indexA,
а также варианты сравнения, передаваемые в качестве
string strB, int
параметра options. Сравнение начинается со строковых
indexB, int length,
элементов strA[ indexA] и strB[indexB] и включает
Culturelnfo culture,
количество символов, определяемых параметром length.
CompareOptions
Метод возвращает положительное значение, если часть стро
options)
ки strA больше части строки strB ; отрицательное значение, если часть строки strA меньше части строки strB ; и нуль, если сравниваемые части строк strA и strB равны. Классы

Culturelnfo и CompareOptions определены в пространстве имен System.Globalization
public static int
Сравнивает строку strAco строкой strB независимо от куль
CompareOrdinal(string
турной среды, языка и региональных стандартов. Возвращает
strA, string strB)
положительное значение, если строка strA больше строки strB; отрицательное значение, если строка strA меньше строки strB ; и нуль, если строки strA и strB равны
public static int
Сравнивает части строк strA и strB независимо от культурной
CompareOrdinal(string
среды, языка и региональных стандартов. Сравнение начинает
strA, int indexA,
ся со строковых элементов strА[ indexA] и strB[ indexB]
string strB, int
и включает количество символов, определяемых параметром
indexB, int count)
count. Метод возвращает положительное значение, если часть строки strA больше части строки strB ; отрицательное значение, если часть строки strA меньше части строки strB ; и нуль, если сравниваемые части строк strA и strB равны
public int
Сравнивает вызывающую строку со строковым представле
CompareTo(object
нием объекта value. Возвращает положительное значение,
value)
если вызывающая строка больше строки value; отрицательное значение, если вызывающая строка меньше строки value; и нуль, если сравниваемые строки равны
public int
Сравнивает вызывающую строку со строкой strB. Возвра
CompareTo(string
щает положительное значение, если вызывающая строка
strB)
больше строки strB; отрицательное значение, если вызывающая строка меньше строки strB; и нуль, если сравниваемые строки равны
Метод
Назначение
public override bool
Возвращает логическое значение true, если вызывающая
Equals(object
obj)
строка содержит ту же последовательность символов, что и строковое представление объекта obj. Выполняется порядковое сравнение с учетом регистра, но без учета культурной среды
public bool
Возвращает логическое значение true, если вызывающая
Equals(string
value)
строка содержит ту же последовательность символов, что и строка value. Выполняется порядковое сравнение с учетом регистра, но без учета культурной среды
public bool
Возвращает логическое значение true, если вызывающая
Equals(string
value,
строка содержит ту же последовательность символов, что и
StringComparison
строка value. Параметр comparison Туре определяет кон
comparisonType)
кретный способ сравнения строк
public static
bool
Возвращает логическое значение true, если строка а содер
Equals(string
a,
жит ту же последовательность символов, что и строка Ь. Вы
string b)
полняется порядковое сравнение с учетом регистра, но без учета культурной среды
public static
bpol
Возвращает логическое значение true, если строка а со
Equals(string
a,
держит ту же последовательность символов, что и строка Ь.
string b,
Параметр comparisonType определяет конкретный способ
StringComparison
сравнения строк
comparison Type)
Тип 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 { 1 static void Main() { string strl = "alpha"; string str2 = "Alpha";

string str3 = "Beta"; string str4 = "alpha"; string str5 = "alpha, beta"; int result;

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

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

result = String.Compare(strl, str2, StringComparison.CurrentCulture)

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

if(result < 0)

Console.WriteLine(strl + " меньше " + str2); else if(result > 0)

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

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

result = String.Compare(strl, 'str2, StringComparison.Ordinal); Console.Write("Порядковое сравнение строк: "); if(result < 0)

Console.WriteLine(strl + " меньше " + str2); else if(result > 0)

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

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

// Использовать метод CompareOrdinal(). result = String.CompareOrdinal(strl, str2);

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

Console.WriteLine(strl + " меньше " + str2) ; else if(result > 0)

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

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

Console.WriteLine();

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

// Это порядковое сравнение символьных строк, if(strl == str4) Console.WriteLine(strl + " == " + str4);

// Определить неравенство строк с помощью оператора !=. if(strl != str3) Console.WriteLine(strl + " != " + str3); if(strl != str2) Console.WriteLine(strl + " != " + str2);

Console.WriteLine();

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

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

if(String.Equals(strl, str2, StringComparison.OrdinallgnoreCase)) Console.WriteLine("Сравнение строк методом Equals() с " + "параметром OrdinallgnoreCase:\n" + strl + " равно " + str2);

Console.WriteLine ();

// Сравнить части строк, if (String.Compare(str2, 0, str5, 0, 3,

StringComparison.CurrentCulture) >0) {

Console.WriteLine("Сравнение строк с учетом текущей культурной среды:" + "\пЗ первых символа строки " + 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. Конечно, для этой цели проще всего воспользоваться оператором +, тем не менее методы сцепления служат неплохой альтернативой такому подходу.

Метод, выполняющий сцепление строк, называется Concat () . Ниже приведена одна из самых распространенных его форм.

public static string Concat(string strO, string strl)

Этот метод возвращает строку, состоящую из строки strl , присоединяемой путем сцепления в конце строки strO. Ниже приведена еще одна форма метода Concat (), в которой сцепляются три строки.

public static string Concat(string strO, string strl ,string str2)

В данной форме метод Concat () возвращает строку, состоящую из последовательно сцепленных строк strOf strl и str2.

Имеется также форма метода Concat () , в которой сцепляются четыре строки.

public static string Concat(string strO, string strl , string str2, string str3)

В этой форме метод Concat () возвращает строку, состоящую из четырех последовательно сцепленных строк.

А в приведенной ниже еще одной форме метода Со neat () сцепляется произвольное количество строк:

public static string Concat(params string[] values)

где values обозначает переменное количество аргументов, сцепляемых для получения возвращаемого результата. Если в этой форме метода Concat () допускается сцепление произвольного количества строк, то зачем нужны все остальные его формы? Они существуют ради повышения эффективности. Ведь передача методу от одного до четырех аргументов оказывается намного эффективнее, чем использование для этой цели переменного списка аргументов.

В приведенном ниже примере программы демонстрируется применение метода Concat () в форме с переменным списком аргументов.

// Продемонстрировать применение метода Concat().

using System;

class ConcatDemo { static void Main() {

string result = String.Concat("Это ", "тест ", "метода ",

"сцепления ", "строк ",

"из класса ", "String." );

Console.WriteLine("Результат: " + result);

}

}

Эта программа дает следующий результат.

Результат: Это тест метода сцепления строк из класса String.

Кроме того, существуют варианты метода Concat () , в которых он принимает в качестве параметров ссылки на объекты, а не на строки. В этих вариантах метод Concat () получает строковые представления вызывающих объектов, а возвращает объединенную строку, сцепленную из этих представлений. (Строковые представления объектов получаются с помощью метода ToStringO, вызываемого для этих объектов.) Ниже приведены все подобные варианты и формы метода Concat ().

public static    string    Concat(object    argO)

public static    string    Concat(object    argO,    object    argl)

public static    string    Concat(object    argO,    object    argl,    object    arg2)

public static    string    Concat(object    argO,    object    argl,    object    arg2, object arg3)
1   ...   63   64   65   66   67   68   69   70   ...   97


написать администратору сайта