Свойство Length возвращает количество символов в строке.
Операторы класса String
В классе String перегружаются два следующих оператора: == и ! =. Оператор == служит для* проверки двух символьных строк на равенство. Когда оператор == применяется к ссылкам на объекты, он обычно проверяет, делаются ли обе ссылки на один и тот же объект. А когда оператор == применяется к ссылкам на объекты типа String, то на предмет равенства сравнивается содержимое самих строк. Это же относится и к оператору ! =. Когда он применяется к ссылкам на объекты типа String, то на предмет неравенства сравнивается содержимое самих строк. В то же время другие операторы отношения, в том числе < и >=, сравнивают ссылки на объекты типа String таким же образом, как и на объекты других типов. А для того чтобы проверить, является ли одна строка больше другой, следует вызвать метод Compare (), определенный в классе String.
Как станет ясно дальше, во многих видах сравнения символьных строк используются сведения о культурной среде. Но это не относится к операторам = = и ! =. Ведь они просто сравнивают порядковые значения символов в строках. (Иными словами, они сравнивают двоичные значения символов, не видоизмененные нормами культурной среды, т.е. региональными стандартами.) Следовательно, эти операторы выполняют сравнение строк без учета регистра и настроек культурной среды.
Сравнение строк
Вероятно, из всех операций обработки символьных строк чаще всего выполняется сравнение одной строки с другой. Прежде чем рассматривать какие-либо методы сравнения строк, следует подчеркнуть следующее: сравнение строк может быть выполнено в среде .NET Framework двумя основными способами. Во-первых, сравнение может отражать обычаи и нормы отдельной культурной среды, которые зачастую представляют собой настройки культурной среды, вступающие в силу при выполнении программы. Это стандартное поведение некоторых, хотя и не всех методов сравнения. И во-вторых, сравнение может быть выполнено независимо от настроек культурной среды только по порядковым значениям символов, составляющих строку. Вообще говоря, при сравнении строк без учета культурной среды используется лексикографический порядок (и лингвистические особенности), чтобы определить, является ли одна строка больше, меньше или равной другой строке. При порядковом сравнении строки просто упорядочиваются на основании невидоизмененного значения каждого символа.
ПРИМЕЧАНИЕ
В силу отличий способов сравнения строк с учетом культурной среды и порядкового сравнения, а также последствий каждого такого сравнения настоятельно рекомендуется руководствоваться лучшими методиками, предлагаемыми в настоящее время корпорацией Microsoft. Ведь выбор неверного способа сравнения строк может привести к неправильной работе программы, когда она эксплуатируется в среде, отличающей от той, в которой она разработана.
Выбор способа сравнения символьных строк представляет собой весьма ответственное решение. Как правило и без всякий исключений, следует выбирать сравнение строк с учетом культурной среды, если это делается для целей отображения результата пользователю (например, для вывода на экран ряда строк, отсортированных в лексикографическом порядке). Но если строки содержат фиксированную информацию, не предназначенную для видоизменения с учетом отличий в культурных средах, например, имя файла, ключевое слово, адрес веб-сайта или значение, связанное с обеспечением безопасности, то следует выбрать порядковое сравнение строк. Разумеется, особенности конкретного разрабатываемого приложения будут диктовать выбор подходящего способа сравнения символьных строк.
В классе String предоставляются самые разные методы сравнения строк, перечисленные в табл. 22.1. Наиболее универсальным среди них является метод Compare (). Он позволяет сравнивать две строки полностью или частично, с учетом или без учета регистра, способа сравнения, определяемого параметром типа StringComparison, а также сведений о культурной среде, предоставляемых с помощью параметра типа Culturelnfo. Те перегружаемые варианты метода Compare (), которые не содержат параметр типа StringComparison, выполняют сравнение символьных строк с учетом регистра и культурной среды. А в тех перегружаемых его вариантах, которые не содержат параметр типа Culturelnfo, сведения о культурной среде определяются текущей средой выполнения. В примерах программ, приведенных в этой главе, параметр типа Culturelnfo не используется, а большее внимание уделяется использованию параметра типа StringComparison.
Таблица 22.1. Методы сравнения символьных строк
Метод
Назначение
Public static int
Сравнивает строку strA со строкой strB. Возвращает поло
Compare(string strA,
жительное значение, если строка strA больше строки strB ;
string strB)
отрицательное значение, если строка strA меньше строки strB ; и нуль, если строки strA и strB равны. Сравнение выполняется с учетом регистра и культурной среды
Public static int
Сравнивает строку strA со строкой strB. Возвращает поло
Compare(string strA,
жительное значение, если строка strA больше строки strB ;
string strB, bool
отрицательное значение, если строка strA меньше строки
ignoreCase)
strB ; и нуль, если строки strA и strB равны. Если параметр ignoreCase принимает логическое значение true, то при сравнении не учитываются различия между прописным и строчным вариантами букв. В противном случае эти различия учитываются. Сравнение выполняется с учетом культурной среды
Public static int
Сравнивает строку strA со строкой strB. Возвращает положи
Compare(string
тельное значение, если строка strA больше строки strB ; отрица
strA, string strB,
тельное значение, если строка strA меньше строки strB-, и нуль,
StringComparison
если строки strA и strB равны. Параметр comparisonType
comparisonType)
определяет конкретный способ сравнения строк
Public static int.
Сравнивает строку strA со строкой strB, используя информа
Compare(string
цию о культурной среде, определяемую параметром culture.
strA, string strB,
Возвращает положительное значение, если строка strA боль
bool ignoreCase,
ше строки strB ;отрицательное значение, если строка strA
Culturelnfo culture)
меньше строки strB ; и нуль, если строки strA и strB равны. Если параметр ignoreCase принимает логическое значение true, то при сравнении не учитываются различия между прописным и строчным вариантами букв. В противном случае эти различия учитываются. Класс Culturelnfo определен в пространстве имен System.Globalization
Метод
Назначение
Public static int
Сравнивает части строк strA и strB. Сравнение начинается
Compare(string strA,
со строковых элементов strA[ indexA] и strB[indexB]
int indexA, string
и включает количество символов, определяемых параметром
strB, int indexB,
length. Метод возвращает положительное значение, если
int length)
часть строки strA больше части строки strB] отрицательное значение, если часть строки strA меньше части строки strB ; и нуль, если сравниваемые части строк strA и strB равны. Сравнение выполняется с учетом регистра и культурной среды
Public static int
Сравнивает части строк strA и strB. Сравнение начинается
Compare(string strA,
СО строковых элементов str А[ indexA] и strB[indexB]
int indexA, string
и включает количество символов, определяемых параметром
strB, int indexB,
length. Метод возвращает положительное значение, если
int length, bool
часть строки strA больше части строки strB ; отрицатель
ignoreCase)
ное значение, если часть строки strA меньше части строки strB ; и нуль, если сравниваемые части строк strA и strB равны. Если параметр ignoreCase принимает логическое значение true, то при сравнении не учитываются различия между прописным и строчным вариантами букв. В противном случае эти различия учитываются. Сравнение выполняется с учетом культурной среды
Public static int
Сравнивает части строк strA и strB. Сравнение начинается
Compare(string
со строковых элементов strA[ indexA] и strB[indexB]
strA, int indexA,
и включает количество символов, определяемых параметром
string strB, int
length. Метод возвращает положительное значение, если
indexB, int length,
часть строки strA больше части строки strB ; отрицатель
StringComparison
ное значение, если часть строки strA меньше части строки
comparisonType)
strB ; и нуль, если сравниваемые части строк strA и strB равны. Параметр comparisonType определяет конкретный способ сравнения строк
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
Сравнение строк производится с использованием неизменяемых, т.е. универсальных данных о культурной среде
Значение
Описание