Свойство 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

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

Значение

Описание

Наши рекомендации