Г. Шилдт - С# 3.0 Полное руководство. 2010 (1160798), страница 150
Текст из файла (страница 150)
Метод возвращает значение -1, если искомая подстрока не обнаружена Возвращает индекс последнего вхождения подстроки ясг в вызывающей строке. Параметр способ определяет кон- кретный способ выполнения поиска. Метод возвращает зна- чение -1, если искомая подстрока не обнаружена Возвращает индекс последнего вхождения подстроки ясг в части вызывающей строки.
Поиск осуществляется в об- ратном порядке, начиная с элемента, указываемого по ин- дексу ясегс, и заканчивая элементом с нулевым индексом. Параметр способ определяет конкретный способ выполне- ния поиска. Метод возвращает значение -1, если искомая подстрока не обнаружена Возвращает индекс последнего вхождения подстроки я сг в части вызывающей строки. Поиск осуществляется в обрат- ном порядке, начиная с элемента, указываемого по индексу всего, и охватывает число элементов, определяемых пара- метром соил с. Параметр способ определяет конкретный способ выполнения поиска.
Метод возвращает значение -1, если искомая подстрока не обнаружена Возвращает логическое значение сгие, если вызывающая строка начинается с подстроки ясг. В противном случае возвращается логическое значение Га1яе Возвращает логическое значение сгие, если вызывающая строка начинается с подстроки я сг. В противном случае воз- вращается логическое значение сатяе. Параметр способ определяет конкретный способ выполнения поиска Глава 22. Строки и форматирование 761 Окончание габл.
22.3 Метод Назначение риЬ1гс Ьоо1 эгаггянсСЬ(згггпд Ьоо1 1дпогесаяе, Си1Сиге1псо ох) Возвращает логическое значение сгие, если вызывающая строка начинается с подстроки я сг. В противном случае возвращается логическое значение га1яе. Если параметр хдпогепаяе ПРинимает логичЕСкое значенИЕ Сгие, тО При сравнении не учитываются различия между прописным и строчным вариантами букв. В противном случае зги различия учитываются. Поиск осуществляется с использованием инфор- мации кулыурного характера, определяемой параметром ох ясг, Разделение и соединение строк К основным операциям обработки строк относятся разделение и соединение. При разделении строка разбивается иа составные части, а при соединении строка составляется из отдельных частей.
Для разделения строк в классе 5Сгспд определен метод 5р11С (), а для соединения — метод ОО1п () . Существует несколько вариантов метода 5р11С () . Ниже приведены две формы этого метода, ставшие наиболее употребительными, начиная с версии С(С 1.0. ригаго яггспд( ] зр11С(рагашя спаг( ] яеря) ригаго яггспд[ ] эр11С(рагашз опаг( ] яеря, спС соипг) В первой форме метода ОО1п() возвращается строка, состоящая из сцепляемых подстрок, передаваемых в массиве я сгя. Во второй форме также.
возвращается строка, состоящая из подстрок, передаваемых в массиве я сгя, ио оии сцепляются в определенном количестве соипс, начиная с элемента массива ясгя(ясагс]. В обеих формах каждая последующая строка отделяется от предыдущей разделительной строкой, определяемой параметром яер. В приведенном ниже примере программы демонстрируется применение методов зр11С () и уоуп () . // Разделить н соединить строки. изгпд зузгеш; с1аяз эр11Сапбэофппешо ( яСаггс иосб Масп() ( яггспд згг "Один на суше, другой на море.' спас [) яеря = ( ' ', ' .
', ', ' ); // Разделить строку на части. ягггпд(] рагСя = ягг.эр11С(веря); В первой форме метода Вр11с ( ) вызывающая строка разделяется иа составные части. В итоге возвращается массив, содержащий подстроки, полученные из вызывающей стро- ки. Символы, ограничивающие эти подстроки, передаются в массиве яеря. Если массив яеря пуст или ссылается иа пустую строку, то в качестве разделителя подстрок исполь- зуется пробел. А во второй форме данного метода возвращается количество подстрок, определяемых параметром соил с. Ниже приведены две формы метода ЭО1п () . ригаго ясас1о ягггпд Юосп(яггспд яер, ягг1пд( ] яогя) ривзсс ягагсс яггспд ЮЬ1п(яггспд яер, яггспд[ ] яогя, гпг яоагС, 1пг соипС) 762 Часть ((. Бкбякстега С» Сопяо1е.нт1тепьпе("Результат разделения строки: "); Рог(1пт г=О; г < ракия.пепдтЫ 1++) Сопяо1е.нггтепьпе(ракия[1)); // Л теперь соединить части строки.
ятг1пп нпо1е = Бсг1по.бо1п(" ( ", рагтя); Сипяо1е.итгтепьпе("Результат соединения строки: "); Сопяо1е.нт1сеЬРпе(нпо1е); ) ) Ниже приведен результат выполнения этой программы. Результат разделения строки: Олин суше другой на море Результат соединения строки: Один ) на ) суше ( ( другой ( на ( море Обратите внимание на пустую строку между словами "суше" и "другой".
Дело в том, что в исходной строке после слова "суше" следует запятая и пробел, как в подстроке "суше, другой". Но запятая и пробел указаны в качестве разделителей. Поэтому при разделении данной строки между двумя разделителями 1запятой и пробелом) оказывается пустая строка. Существует ряд других форм метода Яр11г(), принимающих параметр типа Ягг1ппэр1110рС1опя. Этот параметр определяет, являются ли пустые строки частью разделяемой в итоге строки. Ниже приведены все эти формы метода Яр111 () . риЫьс ятг1пц[] Бр11Г(рагавя пьат() яеря, Бтт1ппзр11ГОРГ1опя способ) риЫгс ятг1пд[] БР1гт(ятг1пд[) яеря, 5гтгпозр1геортгипя способ) риЫгс ятг1пи[) Яр11Г(ратавя сваг() яеря, тпт соиле,эттьпдЯР1гтортгопя способ) риЫгс ятт1пп(] ЯР11Г(ятт1пи[] яеря, гпс соиле,зтггпцБр11ГОРГ1опя способ) В двух первых формах метода Бр1гт () ВыЗывающая строка разделяется на части и возвращается массив, содержащий подстроки, полученные из вызывающей строки. Символы, разделяющие эти подстроки, передаются в массиве Беря.
Если массив яеря пуст, то в качестве разделителя используется пробел. А в третьей и четвертой формах данного метода возвращается количество строк, ограничиваемое параметром соила. Но во всех формах параметр способ обозначает конкретный способ обработки пустых строк, которые образуются в том случае, если два разделителя оказываются рядом. В перечислении Ятт1поЯр11ГОрт1опя определяются только два значения: Мопе и НевочеЕвртуЕпст1ея. Если параметр способ принимает значение попе, то пустые строки включаются в конечный результат разделения исходной строки, как показано в предыдущем примере программы. А если параметр способ принимает значение НевочеЕвргунптг1ея, то пустые строки исключаются из конечного результата разделения исходной строки. Для того чтобы стали понятнее последствия исключения пустых строк, попробуем заменить в предыдущем примере программы строку кода Глава 22.
Строки и форматирование 763 ясгапд[] рагсз = всг.Яр11Г(веря); следующим фрагментом кода: вступи() рагсв = всг.ЯР11Г(веря,зсггпдзр11ГОрсаопя.аешочеЕшрсуЕпсгаея)т При выполнении данной программы получится следующий результат: Результат разделения строки: Один на суше другой на море Результат соединения строки: Один ( на ( суше ( другой ( на ( море Как видите, пустая строка, появлявшаяся ранее из-за того, что после слова "суше" следовали запятая и пробел, теперь исключена.
Разделение является очень важной процедурой обработки строк, поскольку с его помощью нередко получают отдельные лексемы, составляющие исходную строку. Так, в программе ведения базы данных может возникнуть потребность разделить с помощью метода Яр11г() строку запроса "показать все остатки больше 100" на отдельные части, включая подстроки "показать" и "100". В процессе разделения исключаются разделители, поэтому в итоге получается подстрока "показать" [ббз начальных и конечных пробелов), а не подстрока " показать". Этот принцип демонстрируется в приведенном ниже примере программы, где строки, содержащие такие бинарные математические операции, как 10 + 5, преобразуются в лексемы, а затем эти операции выполняются и выводится конечный результат.
// Преобразовать строки з лексемы. оятпч Яузсеии с1авз тохепавепешо ( зсасас човн Иаап() ( всг1пч[] 1прнс = [ "100 т 19", "100 / 3.3", "-3 * 9", "100 — 87" )т сваг[] веря = (' тот(апс 1=0; 1 < горов.Ьепчкпт 1+ь) ( // разлепить строку на части всгвпч() рагсз = алрос[1].ЯР11Г(веря)т Сопяо1е.иг1се("Команда. ""); Кот (1пс 3=07 3 < Рагса. Ьепчспт 3т+) Сопво1е.игвсе(рагсв[3] т " ")7 Сопзо1е.иг1се(", результат. ""]т «(ооЬ1е и = Ооовуе.рагве(рагся[0])т бонЬ1е п2 = ПонЬ1е.рагяе(рагсв[2]); 764 Часть )). Библиотека Сз янзссп (раков [1) ) ( саяе "+"с Сопяо1е.Игзкевгпе(п + п2)т Ьгеа)ст саве "-": Сопяо1е.иг1кеьгпе(п — п2)т Ьгеа)м саве "*": Сопяо1е.иг1кеьвпе(п * п2)т Ьгеа)ст саяе "/": Сопво1е.Иггсе11пе(п / п2)т Ьгеа)с; Вот к какому результату приводит выполнение этой программьс Команда: 100 + 19, результат: 119 Команла: 100 / 3.3, результат: 30.3030303030303 Команда: -3 * 9, результат: -27 Команда: 100 — 87, результат: 13 Заполнение и обрезка строк Иногда в строке требуется удалить начальные и конечные пробелы.
Такая операция называется обрезкой и нередко требуется в командных процессорах. Например, программа ведения базы данных способна распознавать команду "рг[пг", но пользователь может ввести эту команду с одним или более начальным и конечным пробелом. Поэтому перед распознаванием введенной команды необходимо удалить все подобные пробелы. С другой стороны, строку иногда требуется заполнить пробелами, чтобы она имела необходимую минимальную длину. Так, если подготавливается вывод результатов в определенном формате, то каждая выводимая строка должна иметь определенную длину, чтобы сохранить выравнивание строк.
Для упрощения подобных операций в С№ предусмотрены соответствующие методы. Для обрезки строк используется одна из приведенных ниже форм метода тг1лс () . рнЬ11с вкг1пд тгзе() рнвзгс яссзпд тгза(рагаея спас[ ] слгя) В первой форме метода тг1лс () из вызывающей строки удаляются начальные и конечные пробелы. А во второй форме этого метода удаляются начальные и конечные вхождения в вызывающей строке символов из массива с)тгя, В обеих формах возвращается получившаяся в итоге строка.