программирование. Руководство su P# a n Reference в herbert schildt полное руководство с 0 герберт шилдт
Скачать 3.32 Mb.
|
Иногда в строке требуется удалить начальные и конечные пробелы. Такая операция называется обрезкой и нередко требуется в командных процессорах. Например, программа ведения базы данных способна распознавать команду "print'7, но пользователь может ввести эту команду с одним или несколькими начальными и конечными пробелами. Поэтому перед распознаванием введенной команды необходимо удалить все подобные пробелы. С другой стороны, строку иногда требуется заполнить пробелами, чтобы она имела необходимую минимальную длину. Так, если подготавливается вывод результатов в определенном формате, то каждая выводимая строка должна иметь определенную длину, чтобы сохранить выравнивание строк. Для упрощения подобных операций в C# предусмотрены соответствующие методы. Для обрезки строк используется одна из приведенных ниже форм метода Trim (). public string Trim() public string Trim(params char[] trimChars) В первой форме метода Trim () из вызывающей строки удаляются начальные и конечные пробелы. А во второй форме этого метода удаляются начальные и конечные вхождения в вызывающей строке символов из массива trimChars. В обеих формах возвращается получающаяся в итоге строка. Строку можно заполнить символами слева или справа. Для заполнения строки слева служат такие формы метода PadLef t (). public string PadLeft(int totalWidth) public string PadLeft(int totalWidth, char paddingChar) В первой форме метода PadLef t () вводятся пробелы с левой стороны вызывающей строки, чтобы ее общая длина стала равной значению параметра totalWidth. А во второй форме данного метода символы, обозначаемые параметром paddingChar , вводятся с левой стороны вызывающей строки, чтобы ее общая длина стала равной значению параметра totalWidth . В обеих формах возвращается получающаяся в итоге строка. Если значение параметра totalWidth меньше длины вызывающей строки, то возвращается копия неизмененной вызывающей строки. Для заполнения строки справа служат следующие формы метода PadRight (). public string PadRight(int totalWidth) public string PadRight(int totalWidth, char paddingChar) В первой форме метода PadLef t () вводятся пробелы с правой стороны вызывающей строки, чтобы ее общая длина стала равной значению параметра totalWidth. А во второй форме данного метода символы, обозначаемые параметром paddingChar, вводятся с правой стороны вызывающей строки, чтобы ее общая длина стала равной значению параметра totalWidth.B обеих формах возвращается получающаяся в итоге строка. Если значение параметра totalWidth меньше длины вызывающей строки, то возвращается копия неизмененной вызывающей строки. В приведенном ниже примере программы демонстрируются обрезка и заполнение строк. // Пример обрезки и заполнения строк. using System; class TrimPadDemo { static void Main() { string str = "тест"; Console.WriteLine("Исходная строка: " + str); // Заполнить строку пробелами слева, str = str.PadLeft(10); Console.WriteLine("I" + str + "I"); // Заполнить строку пробелами справа, str = str.PadRight(20); Console.WriteLine("I" + str + "I"); // Обрезать пробелы, str = str.Trim(); Console.WriteLine("|" + str + "I"); // Заполнить строку символами # слева, str = str.PadLeft(10, '#'); Console.WriteLine ("|" + str + "I"); // Заполнить строку символами # справа, str = str.PadRight(20, '#'); Console.WriteLine("|" + str + "I"); // Обрезать символы #. str = str.Trim('#'); Console.WriteLine("|" + str + "|"); } } Эта программа дает следующий результат. Исходная строка: тест I тест| | тест | |тест| I ######тест| |######тест##########| I тест| Вставка, удаление и замена строк Для вставки одной строки в другую служит приведенный ниже метод Insert (): public string Insert(int startlndex, string value) где value обозначает строку, вставляемую в вызывающую строку по индексу startlndex. Метод возвращает получившуюся в итоге строку. Для удаления части строки служит метод Remove () . Ниже приведены две его формы. public string Remove(int startlndex) public string Remove(int startlndex, int count) В первой форме метода Remove () удаление выполняется, начиная с места, указываемого по индексу startlndex , и продолжается до конца строки. А во второй форме данного метода из строки удаляется количество символов, определяемое параметром count , начиная с места, указываемого по индексу startlndex. В обеих формах возвращается получающаяся в итоге строка. Для замены части строки служит метод Replace () . Ниже приведены две его формы. public string Replace(char oldChar, char newChar) public string Replace(string oldValue, string newValue) В первой форме метода Replace () все вхождения символа oldChar в вызывающей строке заменяются символом newChar. А во второй форме данного метода все вхождения строки oldValue в вызывающей строке заменяются строкой newValue. В обеих формах возвращается получающаяся в итоге строка. В приведенном ниже примере демонстрируется применение методов Insert (), Remove () и Replace(). // Пример вставки, замены и удаления строк. using System; class InsRepRevDemO { static void Main() { string str = "Это тест"; Console.WriteLine("Исходная строка: " + str); // Вставить строку. str = str.Insert(4, "простой "); Console.WriteLine(str) ; // Заменить строку. str = str.Replace("простой", "непростой "); Console.WriteLine (str); // Заменить символы в строке str = str.Replace('т', 'X'); Console.WriteLine(str); // Удалить строку, str = str.Remove(4, 5); Console.WriteLine(str); Ниже приведен результат выполнения этой программы. Исходная строка: Это тест Это простой тест Это непростой _тест ЭХо непросХой ХесХ ЭХо сХой ХесХ Смена регистра В классе String предоставляются два удобных метода, позволяющих сменить регистр букв в строке, – ToUpper ( ) и ToLower () . Диже приведены их простейшие формы. public string ToLower() public string ToUpper() Метод ToLower () делает строчными все буквы в вызывающей строке, а метод ToUpper () делает их прописными. В обоих случаях возвращается получающаяся в итоге строка. Имеются также следующие формы этих методов, в которых можно указывать информацию о культурной среде и способы преобразования символов. public string ToLower (Culturelnfo culture) public string ToUpper(Culturelnfo culture) С помощью этих форм можно избежать неоднозначности в исходном коде по отношению к правилам смены регистра. Именно для таких целей эти формы и рекомендуется применять. Кроме того, имеются следующие методы ToUpper Invariant ( ) и ToLowerlnvariant(). public string ToUpperlnvariant () public string ToLowerlnvariant() Эти методы аналогичны методам ToUpper ( ) и ToLower () , за исключением того, что они изменяют регистр букв в вызывающей строке безотносительно к настройкам культурной среды. Применение метода Substring () Для получения части строки служит метод SubstringO. Ниже приведены две его формы. public string Substring(int startlndex) public string Substring(int startlndex, int length) В первой форме метода Substring () подстрока извлекается, начиная с места, обозначаемого параметром startlndex, и до конца вызывающей строки. А во второй форме данного метода извлекается подстрока, состоящая из количества символов, определяемых параметром length, начиная с места, обозначаемого параметром startlndex. В обеих формах возвращается получающаяся в итоге подстрока. В приведенном ниже примере программы демонстрируется применение метода Substring(). // Использовать метод Substring(). using System; class SubstringDemo { static void Main() { string str ‑ "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; Console.WriteLine("Строка str: " + str); Console.Write("Подстрока str.Substring(15): "); string substr = str.Substring(15); Console.WriteLine(substr); Console.Write("Подстрока str.Substring(0, 15): "); substr = str.Substring(0, 15); Console.WriteLine (substr); } } Эта программа дает следующий результат. Строка str: ABCDEFGHIJKLMNOPQRSTUVWXYZ Подстрока str.Substring(15): PQRSTUVWXYZ Подстрока' str. Substring (0, 15): ABCDEFGHIJKLMNO Методы расширения класса String Как упоминалось ранее, в классе String реализуется обобщенный интерфейс IEnumerable Форматирование Когда данные встроенных в C# типов, например int или double, требуется отобразить в удобочитаемой форме, приходится формировать их строковое представление. Несмотря на то что в C# для такого представления данных автоматически предоставляется формат, используемый по умолчанию, имеется также возможность указать выбранный формат вручную. Так, в части I этой книги было показано, что числовые данные можно выводить в формате выбранной денежной единицы. Для форматирования данных числовых типов в C# предусмотрен целый ряд методов, включая методы Console . WriteLine ( ), String . Format () и ToString (). Во всех этих методах применяется один и тот же подход к форматированию. Поэтому освоив один из них, вы сможете без особого труда применять и другие. Общее представление о форматировании Форматирование осуществляется с помощью двух компонентов: спецификаторов формата и поставщиков формата. Конкретная форма строкового представления отдельного значения зависит от спецификатора формата. Следовательно, спецификатор формата определяет, в какой именно удобочитаемой форме будут представлены данные. Например, для вывода числового значения в экспоненциальном представлении (т.е. в виде^мантиссы и порядка числа) используется спецификатор формата Е. Как правило, конкретный формат значения зависит от культурных и языковых особенностей локализации программного обеспечения. Например, в Соединенных Штатах Америки денежные суммы указываются в долларах, а в странах ЕС – в евро. Для учета культурных и языковых отличий в C# предусмотрены поставщики формата. В частности, поставщик формата определяет порядок интерпретации спецификатора формата. Поставщик формата создается путем реализации интерфейса I Format Provi der, в котором определяется метод Get Format () . Для всех встроенных числовых типов и многих других типов данных в среде .NET Framework предопределены соответствующие поставщики формата. Вообще говоря, данные можно отформатировать, не указывая конкретный поставщик формата, поэтому поставщики формата не рассматриваются далее в этой книге. Для того чтобы отформатировать данные, достаточно включить спецификатор формата в метод, поддерживающий форматирование. О применении спецификаторов формата речь уже шла в главе 3, тем не менее к этому вопросу стоит вернуться вновь. Применение спецификаторов формата рассматривается далее на примере метода Console . WriteLine ( ), хотя аналогичный подход применим и к другим методам, поддерживающим форматирование. Для форматирования выводимых данных служит следующая форма метода WriteLine(). WriteLine("форматирующая строка", argO, argl, ... , argN) ; В этой форме аргументы метода WriteLine () разделяются запятой, а не знаком +. А форматирующая строка состоит из двух следующих элементов: обычных печатаемых символов, отображаемых в исходном виде, а также команд форматирования. Ниже приведена общая форма команд форматирования: { argnum, width: fmt} где argnum – это номер отображаемого аргумента, начиная с нуля; width – минимальная ширина поля, a fmt – спецификатор формата. Параметры width и fmt не являются обязательными. Поэтому в своей простейшей форме команда форматирования просто указывает конкретные аргументы для отображения. Например, команда { 0 } указывает аргумент агдО, команда {1} – аргумент argl и т.д. Если во время выполнения программы в форматирующей строке встречается команда форматирования, то вместо нее подставляется и затем отображается соответствующий аргумент, определяемый параметром argnum. Следовательно, от положения спецификатора формата в форматирующей строке зависит, где именно будут отображаться соответствующие данные. А номер аргумента определяет конкретный форматируемый аргумент. Если в команде форматирования указывается параметр fmt, то данные отображаются в указываемом формате. В противном случае используется формат, выбираемый по умолчанию. Если же в команде форматирования указывается параметр width, то выводимые данные дополняются пробелами для достижения минимально необходимой ширины поля. При положительном значении параметра width выводимые данные выравниваются по правому краю, а при отрицательном значении – по левому краю. Оставшаяся часть данной главы посвящена вопросам форматирования и отдельным спецификаторам формата. Спецификаторы формата числовых данных Для числовых данных определено несколько спецификаторов формата, сведенных в табл. 22.4. Каждый спецификатор формата может включать в себя дополнительный, но необязательный спецификатор точности. Так, если числовое значение требуется указать в формате с фиксированной точкой и двумя десятичными разрядами в дробной части, то для этой цели служит спецификатор F2. Таблица 22.4. СпеыисЬикатооы (Ьоомата числовых данных Спецификатор Формат Назначение спецификатора точности с Денежная единица Задает количество десятичных разрядов с То же, что и С D Целочисленный (используется только с Задает минимальное количество целыми числами) цифр. При необходимости результат дополняется начальными нулями d То же, что и D Е Экспоненциальное представление чи Задает количество десятичных раз сел (в обозначении используется про рядов. По умолчанию используется писная буква Е) шесть рязрядов е Экспоненциальное представление Задает количество десятичных раз чисел (в обозначении используется рядов. По умолчанию используется строчная буква е) шесть рязрядов F Представление чисел с фиксирован Задает количество десятичных раз ной точкой рядов f То же, что и F G Используется более короткий из двух форматов: Е или F См. спецификаторы Е и F g Используется более короткий из двух форматов: е или f См. спецификаторы е и f N Представление чисел с фиксирован Задает количество десятичных раз ной точкой (и запятой в качестве раз рядов делителя групп разрядов) ‑ n То же, что и N р Проценты Задает количество десятичных разрядов р То же, что и Р R ИЛИ г Числовое значение, которое преобразуется с помощью метода Parse () в эквивалентную внутреннюю форму. (Это так называемый “круговой” формат) Не используется |