Полное руководство. С# 4.0 - Шилдт Герберт
При объявлении строкового литерала автоматически создается строковый объект.Поэтому для инициализации строкового объекта зачастую оказывается достаточноприсвоить ему строковый литерал, как показано ниже.string str = "новая строка";Поле, индексатор и свойство класса String
В классе String определено единственное поле.public static readonly string Empty
Поле Empty обозначает пустую строку, т.е. такую строку, которая не содержит символы. Этим оно отличается от пустой ссылки типа String, которая просто делается нанесуществующий объект.
Помимо этого, в классе String определен единственный индексатор, доступныйтолько для чтения.public char this[int index] { get; }
Этот индексатор позволяет получить символ по указанному индексу. Индексациястрок, как и массивов, начинается с нуля. Объекты типа String отличаются постоянством и не изменяются, поэтому вполне логично, что в классе String поддерживаетсяиндексатор, доступный только для чтения.
И наконец, в классе String определено единственное свойство, доступное толькодля чтения.public int Length { get; }
Свойство Length возвращает количество символов в строке.Операторы класса String
В классе String перегружаются два следующих оператора: == и !=. Оператор ==служит для проверки двух символьных строк на равенство. Когда оператор == применяется к ссылкам на объекты, он обычно проверяет, делаются ли обе ссылки на один и тотже объект. А когда оператор == применяется к ссылкам на объекты типа String, то напредмет равенства сравнивается содержимое самих строк. Это же относится и к оператору !=. Когда он применяется к ссылкам на объекты типа String, то на предмет неравенства сравнивается содержимое самих строк. В то же время другие операторы отношения,в том числе < и >=, сравнивают ссылки на объекты типа String таким же образом, каки на объекты других типов. А для того чтобы проверить, является ли одна строка большедругой, следует вызвать метод Compare(), определенный в классе String.
Как станет ясно дальше, во многих видах сравнения символьных строк используются сведения о культурной среде. Но это не относится к операторам = = и !=. Ведь онипросто сравнивают порядковые значения символов в строках. (Иными словами, онисравнивают двоичные значения символов, не видоизмененные нормами культурнойсреды, т.е. региональными стандартами.) Следовательно, эти операторы выполняютсравнение строк без учета регистра и настроек культурной среды.Сравнение строк
Вероятно, из всех операций обработки символьных строк чаще всего выполняетсясравнение одной строки с другой. Прежде чем рассматривать какие-либо методы сравнения строк, следует подчеркнуть следующее: сравнение строк может быть выполненов среде .NET Framework двумя основными способами. Во-первых, сравнение может отражать обычаи и нормы отдельной культурной среды, которые зачастую представляютсобой настройки культурной среды, вступающие в силу при выполнении программы.Это стандартное поведение некоторых, хотя и не всех методов сравнения. И во-вторых,сравнение может быть выполнено независимо от настроек культурной среды толькопо порядковым значениям символов, составляющих строку. Вообще говоря, при сравнении строк без учета культурной среды используется лексикографический порядок(и лингвистические особенности), чтобы определить, является ли одна строка больше,меньше или равной другой строке. При порядковом сравнении строки просто упорядочиваются на основании невидоизмененного значения каждого символа.
ПРИМЕЧАНИЕВ силу отличий способов сравнения строк с учетом культурной среды и порядкового сравнения, а также последствий каждого такого сравнения настоятельно рекомендуется руководствоваться лучшими методиками, предлагаемыми в настоящее время корпорацией Microsoft.Ведь выбор неверного способа сравнения строк может привести к неправильной работе программы, когда она эксплуатируется в среде, отличающей от той, в которой она разработана.
Выбор способа сравнения символьных строк представляет собой весьма ответственное решение. Как правило и без всякий исключений, следует выбирать сравнениестрок с учетом культурной среды, если это делается для целей отображения результата пользователю (например, для вывода на экран ряда строк, отсортированных в лексикографическом порядке). Но если строки содержат фиксированную информацию,не предназначенную для видоизменения с учетом отличий в культурных средах, например, имя файла, ключевое слово, адрес веб-сайта иди значение, связанное с обеспечением безопасности, то следует выбрать порядковое сравнение строк. Разумеется,особенности конкретного разрабатываемого приложения будут диктовать выбор подходящего способа сравнения символьных строк.
В классе String предоставляются самые разные методы сравнения строк, перечисленные в табл. 22.1. Наиболее универсальным среди них является метод Compare().Он позволяет сравнивать две строки полностью или частично, с учетом или без учетарегистра, способа сравнения, определяемого параметром типа StringComparison,а также сведений о культурной среде, предоставляемых с помощью параметра типаCultureInfo. Те перегружаемые варианты метода Compare(), которые не содержатпараметр типа StringComparison, выполняют сравнение символьных строк с учетомрегистра и культурной среды. А в тех перегружаемых его вариантах, которые не содержат параметр типа CultureInfo, сведения о культурной среде определяются текущей средой выполнения. В примерах программ, приведенных в этой главе, параметртипа CultureInfo не используется, а большее внимание уделяется использованиюпараметра типа StringComparison.
Таблица 22.1. Методы сравнения символьных строкМетодНазначениеpublic static int Compare(string strA, string strB)Сравнивает строку strA со строкой strB. Возвращает положительное значение, если строка strA больше строки strB; отрицательное значение, если строка strA меньше строки strB; и нуль, если строки strA и strB равны. Сравнение выполняется с учетом регистра и культурной средыpublic static int Compare(string strA, string strB, bool ignoreCase)Сравнивает строку strA со строкой strB. Возвращает положительное значение, если строка strA больше строки strB; отрицательное значение, если строка strA меньше строки strB; и нуль, если строки strA и strB равны. Если параметр ignoreCase принимает логическое значение true, то при сравнении не учитываются различия между прописным и строчным вариантами букв. В противном случае эти различия учитываются. Сравнение выполняется с учетом культурной средыpublic static int Compare(string strA, string strB, StringComparison comparisonType)Сравнивает строку strA со строкой strB. Возвращает положительное значение, если строка strA больше строки strB; отрицательное значение, если строка strA меньше строки strB; и нуль, если строки strA и strB равны. Параметр comparisonType определяет конкретный способ сравнения строкpublic static int Compare(string strA, string strB, bool ignoreCase, Culturelnfo culture)Сравнивает строку strA со строкой strB, используя информацию о культурной среде, определяемую параметром culture. Возвращает положительное значение, если строка strA больше строки strB; отрицательное значение, если строка strA меньше строки strB; и нуль, если строки strA и strB равны. Если параметр ignoreCase принимает логическое значение true, то при сравнении не учитываются различия между прописным и строчным вариантами букв. В противном случае эти различия учитываются. Класс CultureInfo определен в пространстве имен System.Globalizationpublic static int Compare(string strA, int indexA, string strB, int indexB, int length)Сравнивает части строк strA и strB. Сравнение начинается со строковых элементов strA[indexA] и strB[indexB] и включает количество символов, определяемых параметром length. Метод возвращает положительное значение, если часть строки strA больше части строки strB; отрицательное значение, если часть строки strA меньше части строки strB; и нуль, если сравниваемые части строк strA и strB равны. Сравнение выполняется с учетом регистра и культурной средыpublic static int Compare(string strA, int IndexA, string strB, int indexB, int length, bool ignoreCase)Сравнивает части строк strA и strB. Сравнение начинается со строковых элементов strA[indexA] и strB[indexB] и включает количество символов, определяемых параметром length. Метод возвращает положительное значение, если часть строки strA больше части строки strB; отрицательное значение, если часть строки strA меньше части строки strB; и нуль, если сравниваемые части строк strA и strB равны. Если параметр ignoreCase принимает логическое значение true, то при сравнении не учитываются различия между прописным и строчным вариантами букв. В противном случае эти различия учитываются. Сравнение выполняется с учетом культурной средыpublic static int Compare(string strA, int indexA, string strB, int indexB, int length, StringComparison comparisonType)Сравнивает части строк strA и strB. Сравнение начинается со строковых элементов strA[indexA] и strB[indexB] и включает количество символов, определяемых параметром length. Метод возвращает положительное значение, если часть строки strA больше части строки strB; отрицательное значение, если часть строки strA меньше части строки strB; и нуль, если сравниваемые части строк strA и strB равны. Параметр comparisonType определяет конкретный способ сравнения строкpublic static int Compare(string strA, int indexA, string strB, int indexB, int length, bool ignoreCase, CultureInfo culture)Сравнивает части строк strA и strB, используя инфор мацию о культурной среде, определяемую параметром culture. Сравнение начинается со строковых элементов strA[indexA] и strB[indexB] и включает количество символов, определяемых параметром length. Метод возвращает положительное значение, если часть строки strA больше части строки strB; отрицательное значение, если часть строки strA меньше части строки strB; и нуль, если сравниваемые части строк strA и strB равны. Если параметр ignoreCase принимает логическое значение true, то при сравнении не учитываются различия между прописным и строчным вариантами букв. В противном случае эти различия учитываются. Класс CultureInfo определен в пространстве имен System.Globalizationpublic static int Compare(string strA, string strB, Culturelnfo culture, CompareOptions options)Сравнивает строку strA со строкой strB, используя информацию о культурной среде, обозначаемую параметром culture, а также варианты сравнения, передаваемые в качестве параметра options. Возвращает положительное значение, если строка strA больше строки strB; отрицательное значение, если строка strA меньше строки strB; и нуль, если строки strA и strB равны. Классы CultureInfo и CompareOptions определены в пространстве имен System.Globalizationpublic static int Compare(string strA, int indexA, string strB, int indexB, int length, CultureInfo culture, CompareOptions options)Сравнивает части строк strA и strB, используя информацию о культурной среде, обозначаемую параметром culture, а также варианты сравнения, передаваемые в качестве параметра options. Сравнение начинается со строковых элементов strA[indexA] и strB[indexB] и включает количество символов, определяемых параметром length. Метод возвращает положительное значение, если часть строки strA больше части строки strB; отрицательное значение, если часть строки strA меньше части строки strB; и нуль, если сравниваемые части строк strA и strB равны. Классы CultureInfo и CompareOptions определены в пространстве имен System.Globalizationpublic static int CompareOrdinal(string strA, string strB)Сравнивает строку strA со строкой strB независимо от культурной среды, языка и региональных стандартов. Возвращает положительное значение, если строка strA больше строки strB; отрицательное значение, если строка strA меньше строки strB; и нуль, если строки strA и strB равныpublic static int CompareOrdinal(string strA, int indexA, string strB, int IndexB, int count)Сравнивает части строк strA и strB независимо от культурной среды, языка и региональных стандартов. Сравнение начинается со строковых элементов strA[indexA] и strB[indexB] и включает количество символов, определяемых параметром count. Метод возвращает положительное значение, если часть строки strA больше части строки strB; отрицательное значение, если часть строки strA меньше части строки strB; и нуль, если сравниваемые части строк strA и strB равныpublic int CompareTo(object value)Сравнивает вызывающую строку со строковым представлением объекта value. Возвращает положительное значение, если вызывающая строка больше строки value; отрицательное значение, если вызывающая строка меньше строки value; и нуль, если сравниваемые строки равныpublic int CompareTo(string strB)Сравнивает вызывающую строку со строкой strB. Возвращает положительное значение, если вызывающая строка больше строки strB; отрицательное значение, если вызывающая строка меньше строки strB; и нуль, если сравниваемые строки равныpublic override bool Equals(object obj)Возвращает логическое значение true, если вызывающая строка содержит ту же последовательность символов, что и строковое представление объекта obj. Выполняется порядковое сравнение с учетом регистра, но без учета культурной средыpublic bool Equals(string value)Возвращает логическое значение true, если вызывающая строка содержит ту же последовательность символов, что и строка value. Выполняется порядковое сравнение с учетом регистра, но без учета культурной средыpublic bool Equals(string value, StringComparison comparisonType)Возвращает логическое значение true, если вызывающая строка содержит ту же последовательность символов, что и строка value. Параметр comparisonType определяет конкретный способ сравнения строкpublic static bool Equals(string a, string b)Возвращает логическое значение true, если строка а содержит ту же последовательность символов, что и строка b. Выполняется порядковое сравнение с учетом регистра, но без учета культурной средыpublic static bpol Equals(string a, string b, StringComparison comparisonType)Возвращает логическое значение true, если строка а содержит ту же последовательность символов, что и строка b. Параметр comparisonType определяет конкретный способ сравнения строк