Г. Шилдт - С# 3.0 Полное руководство. 2010 (1160798), страница 148
Текст из файла (страница 148)
Обв варианта данного метода приведены ниже. роо11а ягаггс гпг совраге(ягггпд зсг1, згггпд згг2, згг1пдсоврагаяоп способ) риь11с ягатгс Ьпт Совраге(ятггпд ягг1, Ьпг ясагг1, зтг1пд ясг2, гпт ягагг2, гпт соипс, зтг1пдСовраггяоп способ) В каждом из этих вариантов способ обозначает конкретный способ сравнения строк ягг1 и згг2, а яогапдСовраг1зоп — перечисление, определяющее значения, перечисленные в табл. 22.2.
Используя эти значения, можно производить сравнение строк с уче- 752 Часть и. Библиотека С» том конкретных потребностей приложения. Таким образом, дополнительный параметр типа Ясг1пдСсшраг»зоп расширяет возможности метода Ссшраге () . Таблица 22.2. Значения, определяемые а перечислении Ябг1пдсоираг1воп Значение Описание Сцггепссц1сцге Сравнение строк производится с использованием текущих настроек параметров культурного характера СцггепГСц1сцгетдпогеСаэе Сравнение строк производится с использованием текущих настроек параметров культурного характера, но беэ учета регистра 1пчагтапГСц1сцге Сравнение строк производится с использованием неизменяе- мых, т.е.
универсальных, данных культурного характера ХпчагтапГСц1сцгетпдогеСаяе Сравнение строк производится с использованием неизменяемых, т.е. универсальных, данных культурного характера, но без учета регистра Огг)1па1 Сравнение строк производится с использованием порядковых значений символов е строке. При этом лексикографический порядок может нарушиться, а условные обозначения культурного характера игнорируются Ого»па11дпогеСаяе Сравнение строк производится с использованием порядковых значений символов е строке, но без учета регистра. При этом лексикографический порядок может нарушиться, а условные обозначения культурного характера игнорируются Одним из характерных примеров применения формы метода Сошраге () с перечислением Ятг»пдсошраг»зсп служит сравнение строки с неизменяемым именем файла или паролем. Допустим, что пользователь должен ввести пароль ие-2 3аЬ1хЯ.
Этот пароль остается неизменным независимо от действия конкретных настроек параметров культурного характера. Следовательно, строку вводимого пользователем пароля требуется сравнить без учета культурных отличий, оказывающих влияние на процесс сравнения. Для этого можно, в частности, указать значение Яс г1пдСОшраг1зсп. 1пчаг1апсСО1сцге в качестве параметра способ при вызове метода Сстраге () в рассматриваемой здесь форме, чтобы тем самым исключить все культурные различия при сравнении строк. Именно такой подход демонстрируется в приведенном ниже примере программы. // Сравнить две строки, используя перечисление ЯгггпдСошрагьяоп. цаьпд Яуасешл с1аяз Ясгсошроешо ( эгаг1с чо16 Ма»п() ( // Примечание: никогда не вводите пароль в реальный // код. В данном примере Это делается лишь в целях демонстрации. ясг1пд ранг( = "не-23ЛВ1хз"; ягг1пд эгг; Глава 22.
Строки и форматирование 753 Сопяо1е.иггсешпе("Введите пароль: ") згг = Сопзо1е.веаСЫпе()т // Произвести сравнение Оез учета информации // культурного характера. 1г(ЯСггпд.Соираге(роно, ягг, ЗгггпдСоираггяоп. 1пчаг1апССп1Спге) == О) Сопяо1е.игггевгпе("Пароль принят."); е1яе Сопяо1е.нг1гевгпе("Пароль нелейстзительнмй."); Сцепление строк Строки можно сцеплять, т.е. объединять вместе, двумя способами. Во-первых, с помощью оператора +, как было показано в главе 7. И во-вторых, с помощью одного из методов сцепления, определенных в классе ВСгьпд. Конечно, для этой цели проще всего воспользоваться оператором +, тем не менее методы сцепления служат неплохой альтернативой такому подходу.
Метод, выполняющий сцепление строк, называется сопсас () . Ниже приведена одна их самых распространенных его форм. рпЫгс зоаогс яоггпд Сопсаг(згггпд яог1, згггпд ягг2) Этот метод возвращает строку, состояшую из строки ясг2, присоединяемой путем сцепления в конце строки ясг1. Ниже приведена еще одна форма метода сопсас (), в которой сцепляются три строки. рпЫгс ягаггс ягггпд Сопсаг(яггспд ягг1, згггпд ясг2, ягггпд яггЗ) В данной форме метод сопсас () возвращает строку, состоящую из последовательно сцепленных строк ягг1, ягг2 и яггЗ. Имеется также форма метода Сопсаг (), в которой сцепляются четыре строки: рпЫгс згаггс згггпд СопсаС(зггспд ягг1, згггпд ягг2, згг1пд яггЗ, ягг1пд зггв) В этой форме метод сопсас () возвращает строку, состоящую из четырех последовательно сцепленных строк.
А в приведенной ниже форме метода Сопсаг () сцепляется произвольное количество строк. риЫсс ягаогс зггспд Сопсаг(рагаия ягг1пд[ ] яггя) где ясгя обозначает переменное количество аргументов, сцепляемых для получения возвращаемого результата. Если в этой форме метода Сопсаг() допускается сцепление произвольного количества строк, то зачем нужны все остальные его формы? Они существуют ради повышения эффективности. Ведь передача методу от одного до четырех аргументов оказывается намного эффективнее, чем использование для этой цели переменного списка аргументов. В приведенном ниже примере программы демонстрируется применение метода сопсас () в форме с переменным списком аргументов.
754 Часть П. Библиотека С№ // Продемонстрировать применение метода Сопсаг() цяъпЧ Бувсемт с1аяв Сопсаспеео ( всас№с чо1О Маъпй ( всг1пч геяц1Г = Бсгтпд.Сопсас("Это ", "тесл ", "метода ", "сцепления ", "строк ", "из класса ", "Бсг1пд." ); Сопво1е.иггсетьпе("Результат: " + гевц1г)т Эта программа дате следующий результат: Результат: Это тест метода сцепления строк из класса Бсг1пд. Кроме того, существуют варианты метода сопсас (), в которых он принимает в качестве параметров ссылки на объекты, а не на строки.
В этих вариантах метод сспсаг () получает строковые представления вызывающих объектов, а возвращает объединенную строку, сцепленную из этих представлений. (Строковые представления объектов получаются с помощью метода тозгг1по (), вызываемого для этих объектов.) Ниже приведены все подобные варианты и формы метода сопсас () . рцЫгс всащс всг1пЧ рцЫ1с вгаг№с вгг1пд рцЫгс вкакъс всг1пч Сопсас(оЬ)есс у1) сопсаг(оь)есг у1, оьзесг у2) Сопсаг(оп)есс у1, опзесс у2, оЬ)есг гз) Сопсас(оп)еск у1, оЬ)есс у2, оЬ)есс уз, оЬфеск у4) Сопсас(рагамв оЬ)еск( ] у) рцЫ1с всасъс вкг1пЧ рпЫ1с всасьс всг1пд // Продемонстрировать применение объектной формы метода Сопсас() цв1пд Бувсеап с1авя МуС1авв ( рцЫ1с всасгс гпс Соцпс = 0; рцЬ1гс МуС1авв() ( Соцпсь+; ) ) с1авв Сопсасоемо ( всасъс чогд Ма1п Н ( вкг1пп гевц1Г = Бсг1пд.сопсак("значение равно " Ь 19); Сопво1е.иггсеъьпе("Результат: " Ь гевц1Г); В первой форме метод сспсаг() возвращает строку, эквивалентную объекту у1, а в остальных формах — строку, получаемую в результате сцепления всех аргументов данного метода.
Объектные формы метода соцсаг (), те. относящиеся к типу оь9 ест, очень удобны, поскольку они исключают получение строковых представлений объектов перед их сцеплением. В приведенном ниже примере программы наглядно демонстрируется польза от подобных форм метода сопсас () . Глава 22. Строки и форматирование 755 геяи1С = экг1пд.сопоак("привет ", 88, " ", 20.0, та1яе, " ", 23.45М); Сопяо1е.игакеъ1пе("Результат: " + геяи1С)4 МуС1аяя щс пен МуС1аяя(); геяи1С = экгапд.Сопсак(щс, " текущий счет равен ", МуС1аяя.Соипк)4 Сопяо1е.игккеътпе("Результат: " + геяп1С)К ) ) Вот к какому результату приводит выполнение этой программы: Результат: значение равно 19 Результат: привет 88 20 Ра1яе 23.45 Результат: МуС1аяя текущий счет равен 1 В данном примере метод сопсас() сцепляет строковые представления различных типов данных.
Для каждого аргумента этого метода вызывается соответствующий метод ТОЯСг1пд О, с помощью которого получается строковое представление аргумента. Следовательно, в следующем вызове метода сопсас (): якг1пд геяп1С = 5кгапд.Сопсак("значенне равно " т 19) метод 10032 . Тоэггйпд () вызывается для получения строкового представления к(елого значения 19, а затем метод Сопсаб () сцепляет строки и возвращает результат. Обратите также внимание иа применение объекта определяемого пользователем класса МуС1аяя в следующем вызове метода Сопсаг (): геяи1С = 5сг1пд.сопсак(щс, " текущий счет равен Мус1аяя.сопок)> В данном случае возвращается строковое представление объекта типа МуС1аяз, сцепленное с указываемой строкой. По умолчанию это просто имя класса. Но если переопределить метод то5сгапд (), то вместо строки с именем класса мус1аяя может быть возвращена другая строка. В качестве упражнения попробуйте ввести в приведенный выше пример программы следующий фрагмент кода: рниаас отегг1бе якгтпд Тоэкгтпд() ( гекнгп "Объект типа Мус1аяя"> В этом случае последняя строка результата выполнения программы будет выглядеть так, как показано ниже.
Результат: Объект типа МуС1аяя текущий счет равен 1 Поиске строке В классе 5бг1пд предоставляется немало методов для поиска в строке. С их помощью можно, например, искать в строке отдельный символ, подстроку, первое или последнее вхождение того и другого в строке. Для обнаружения первого вхождения символа или подстроки в обрабатываемой строке служит метод 1пк)ехОК () . Ниже приведены две его формы. 756 Часть П. Библиотека Сф рпЬ11с 1пк 1пбехой(спал сл) рагс хпк 1пбехог(зкгтпд ягг) В первой форме метод 1пбехО1 () возвращает первое вхождение символа СЛ в вызывающей строке, и во второй форме — первое вхождение строки ясг.
Если искомый элемент не найден, то в обоих случаях возвращается значение — 1. Для обнаружения последнего вхождения символа или подстроки в обрабатываемой строке служит метод Паяб1пбехОГ () . Ниже приведены две его формы. риЫгс 1пк Паяк1пбехог(спас сл) риЫяс 1пк Ьаяк1пбехбг(якг1по ягг) В первой форме метод 1пбехО1 () возвращает последнее вхождеиие символа с)т в вызывающей строке, а во второй форме — последнее вхождение строки я сг. Если искомый элемент не найден, то в обоих случаях возвращается значение — 1. Кроме того, в классе 5бгфпд предоставляются еще два интересных метода поиска в строке: 1пбех01йпу () и ПаяС1пбехОЙ)(пу () .