ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 11.12.2025

Просмотров: 3131

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Тe же имена

выровнены и имеют одинаковую длину

имя

'Christa

'

после

обработки

Вия

'Sarah

'

после

обработки

ta 'Jonathan

'

после

обработки

Имя

'Sam

'

после

обработки

Имя 'Schmekowitz ' после обработки

Нажмите <Enter> для завершения программы ...

Метод TrimAndPad () начинает с создания копии переданного ему массива strings. В общем случае функция, работающая с переданными ей аргументами, долж­ на вернуть новые модифицированные значения, а не изменять переданные ей.

TrimAndPad () начинается с цикла, вызывающего Trim () для каждого элемента массива, чтобы удалить лишние пробельные символы с обоих концов строки. Затем вы­ полняется второй цикл, в котором происходит поиск самого длинного элемента массива. И наконец, в последнем цикле для элементов массива вызывается метод PadRight (), удлиняющий строки, делая их равными по длине.

Метод PadRight (10) увеличивает строку так, чтобы ее длина была как минимум 10 символов. Например, если длина исходной строки — 6 символов, то метод PadRight (10) добавит к ней справа еще 4 пробела.

Метод TrimAndPad () возвращает массив выровненных строк для вывода. Функция lain () проходит по полученному списку строк, выводя их на экран. Вот и все.

Использование функции конкатенации

Зачастую программисты сталкиваются с задачей разбивки строки или вставки некоторой подстроки в середину другой строки. Заменить один символ другим проще всего (помощью метода Replace ():

string s = "Danger N o S m o k i n g " ; а.Replace (s, ' ' , ' ! ' )

Этот фрагмент исходного текста преобразует начальную строку в "Danger!NoSmoking". Замена всех вхождений одного символа (в данном случае — пробела) другим

(восклицательным знаком) особенно полезна при генерации списка элементов, разделен­ ии запятыми для упрощения разбора. Однако более распространенный и сложный слу­ чай включает разбиение единой строки на подстроки, отдельную работу с каждой под­ строкой с последующим объединением их в единую модифицированную строку.

Рассмотрим, например, функцию RemoveSpecialChar s ( ) , которая уда­ ляет все встречающиеся специальные символы из передаваемой ей строки. Демонстрационная программа RemoveWithSpac e использует функцию RemoveSpecialChars () для удаления из строки пробельных символов (пробелов, табуляций и символов новой строки).

//

RemoveWhiteSpace

-

определение

функции

 

//

RemoveSpecialChars

() ,

которая

может удалять

из

 

//передаваемой ей

строки произвольный предопределенный

 

// набор символов . В данной демонстрационной

программе

//

функция используется

для удаления из тестовой строки всех

//

пробельных

символов

 

 

 

namespace RemoveWhiteSpace

 

 

'та 9. Работа со строками в С#

215

*


u s i ng System;

public class Program

{

public static v o i d Main(string[] args)

{

//Определение множества пробельных символов

chart] cWhiteSpace = {' ', '\n', ' \ t ' } ;

// Начинаем работу со строкой, в которой имеются

//пробельные символы

string s = " this is a\nstring"; C o n s o l e . W r i t e L i n e ( " Д о : " + s ) ;

// Выводим строку с удаленными пробельными символами Console . WriteLine("После : " +

R e m o v e S p e c i a l C h a r s ( s , cWhiteSpace))

// Ожидаем подтверждения пользователя Console . WriteLine("Нажмите <Enter> для " +

"завершения программы .. . ") ;

C o n s o l e . R e a d ( ) ;

}

// R e m o v e S p e c i a l C h a r s - удаляет из строки все указанные

//символы

public static string R e m o v e S p e c i a l C h a r s ( s t r i n g slnput, chart] cTargets)

{

//В sOutput будет содержаться возвращаемая строка string sOutput = slnput;

//Начинаем поиск пробельных символов

for(;;)

{

// Ищем позиции искомых символов ; если таковых в

//строке больше нет — выходим из цикла

int

nOffset =

s O u t p u t . I n d e x O f A n y ( c T a r g e t s ) ;

if

(nOffset

-1)

{

break ;

}

// Разбиваем строку на две части — до найденного

//символа и после него

string

sBefore

=

sOutput . Substring(0 , n O f f s e t ) ;

string

sAfter

=

sOutput . Substring(nOffset + 1 ) ;

// и объединяем эти части, но уже без найденного

//символа

sOutput = String . Concat(sBefore , s A f t e r ) ;

216

Часть III. Объектно-основанное программировав

Глав

 

I

 


return sOutput;

Ключевой в этой демонстрационной программе является функция RemoveSpecial ­ Chars ( ) . Она возвращает строку, которая представляет собой исходную строку, но с удаленными вхождениями всех символов, содержащихся в массиве cTargets. Чтобы лучше понять эту функцию, представьте, что ей передана строка " ab, cd, е", а массив специальных символов содержит единственный символ ' , 1.

Функция RemoveSpecialChars () начинается с входа в цикл, выход из которого произойдет только тогда, когда в строке не останется ни одной запятой. Функция 1п- dexOf Any () возвращает позицию первой найденной запятой (значение -1 указывает, то ни одна запятая не найдена).

После первого вызова IndexOf An y () возвращает 2 (позиция 1 а1 равна 0, позиция b1 1, а позиция ' , ' — 2). Два следующих вызова функции разбивают строку на две подстроки в указанном месте. Вызов Substring (0, 2) создает подстроку, содержа­ щую два символа, начиная с символа в позиции 0, т.е. "ab". Второй вызов Substring (3) создает подстроку из символов с позиции 3 исходной строки и до ее юнца, т.е. "cd,e" (+1 в вызове позволяет пропустить найденную запятую). Затем функция Concat () объединяет эти подстроки вместе, создавая строку " abed, е".

Управление выполнением передается после этого в начало цикла. Очередная итераднл находит запятую в позиции 4, так что в результате получается строка " abede " . По­ скольку в ней нет ни одной запятой, возвращаемая при последнем проходе позиция рав- иа-1.

Демонстрационная программа сначала выводит строку, содержащую пробельные сиволы, затем использует функцию RemoveSpecialChar s () для их удаления и вы­ водит получившуюся в результате строку:

|о: this is а Wring

После :thisisastring

Зажмите <Enter> для завершения программы ...

Использование ф у н к ц и и SplitQ

В программе RemoveWhiteSpac e было продемонстрировано применение методов Concat () и IndexOf ( ) ; однако использованный способ решения поставленной задачи не самый эффективный. Стоит только немного поду­ мать, и можно получить существенно более эффективную функцию с ис­ пользованием уже знакомой функции Split О. Соответствующая про­ грамма имеется на прилагаемом компакт-диске в каталоге Remove - WhiteSpaceWithSplit. Вот код функции RemoveSpecialChar s () из этой программы.

//RemoveSpecialChars - удаляет из строки все указанные

//символы

rablic static string RemoveSpecialChar s (string slnput, char[] cTargets)

ирование

toa ft Работа со строками в С#

217


//Разбиваем входную строку с использованием указанных

//символов в качестве разделителей

string[] sSubStrings = s l n p u t . S p l i t ( c T a r g e t s ) ;

//В sOutput будет содержаться возвращаемая строка string sOutput = "";

//Цикл по всем подстрокам

foreach(string substring in sSubStrings)

{

sOutput = String . Concat(sOutput , s u b s t r i n g ) ;

}

return sOutput;

}

В этой версии для разбиения входной строки на множество подстрок использу функция Split () с удаляемыми символами в качестве символов-разделителей, скольку разделители не включаются в подстроки, создается эффект их удаления, логика гораздо проще и менее подвержена ошибкам при реализации.

Цикл f oreach в этой версии функции собирает части строки в единое целое. В программы остается неизменным.

Класс String предоставляет в распоряжение программиста метод Format О] форматирования вывода, в основном — чисел. В своей простейшей форме Forma позволяет вставлять строки, числа, логические значения в середину форматируа строки. Рассмотрим, например, следующий вызов:

string myString =

String . Format("{0} умножить на {l} равно { 2 } " , 2, 3, 2*3);

Первый аргумент Format () — форматная строка (строка формата). Элементы в ней указывают, что и-ый аргумент, следующий за форматной строкой, должен вставлен в этой точке. {0} означает первый аргумент (в данном случае — 2), {1 второй (3) и так далее.

Вприведенном фрагменте получившаяся строка присваивается переменной myStr

иимеет следующий вид:

2 умножить на 3 равно 6

Пока не указано иное, функция Format () использует формат по умолчанию для каж типа аргумента. Для указания формата вывода можно размещать в фигурных скобках к номера аргумента дополнительные модификаторы, которые показаны в табл. 9.1.

218

Часть III.

Объектно-основанное программирови