В предыдущем примере неявно применяется метод Format, который заменяет все вхождения параметров в фигурных скобках значениями соответствующих переменных из списка вывода. После номера параметра можно задать минимальную ширину поля вывода, а также указать спецификатор формата, который определяет форму представления выводимого значения.
Спецификатор формата, как явствует из его названия, определяет формат вывода значения. Например, спецификатор С (Currency) означает, что параметр должен форматироваться как валюта с учетом национальных особенностей представления, а спецификатор X (Hexadecimal) задает шестнадцатеричную форму представления выводимого значения. После некоторых спецификаторов можно задать количество позиций, отводимых под дробную часть выводимого значения.
Например, при записи a = {0,6:0.##} после двоеточия задается вид выводимого значения посимвольно, причем на месте каждого символа может стоять либо #, либо 0. Если указан знак #, на этом месте будет выведена цифра числа, если она не равна нулю. Если указан 0, будет выведена любая цифра, в том числе и 0.
В таблице 8.3 приведены примеры шаблонов и результатов вывода.
Таблица 8.3. - Примеры применения пользовательских шаблонов форматирования
Число Шаблон Вид
1,243 00.00 01,24
1,243 #.## 1,24
0,1 00.00 00,10
0,1 #.## ,1
Пользовательский шаблон может также содержать текст, который в общем случае заключается в апострофы.
Возможности, предоставляемые классом string, широки, однако требование неизменности его объектов может оказаться неудобным. В этом случае для работы со строками применяется класс StringBuilder, определенный в пространстве имен System. Text и позволяющий изменять значение своих экземпляров.
При создании экземпляра обязательно использовать операцию new и конструктор, например:
StringBuilder a = new StringBuilder(); //1
StringBuilder b = new StringBuilder( "qwerty" ); //2
StringBuilder с = new StringBuilder( 100 ); //3
StringBuilder d = new StringBuilder( "qwerty", 100 ); //4
StringBuilder e = new StringBuilder( "qwerty", 1, 3, 100 ); //5
В конструкторе класса указываются два вида параметров: инициализирующая строка или подстрока и объем памяти, отводимой под экземпляр. Один или оба параметра могут отсутствовать, в этом случае используются их значения по умолчанию.
Если применяется конструктор без параметров (оператор 1), создается пустая строка размера, заданного по умолчанию (16 байт). Другие виды конструкторов задают объем памяти, выделяемой строке, и/или ее начальное значение. Например, в операторе 5 объект инициализируется подстрокой длиной 3 символа, Начиная с первого (подстрока "wer"). Основные элементы класса StringBuilder приведены в таблице 8.4.
Таблица 8.4 - Основные элементы класса System.Text.StringBuilder
Метод
Описание
Append
Добавление в конец строки. Разные варианты метода позволяют добавлять в строку величины любых встроенных типов, массивы символов, строки и подстроки типа string
AppendFormat
Добавление форматированной строки в конец строки
Capacity
Получение или установка емкости буфера. Если устанавливаемое значение меньше текущей длины строки или больше максимального, генерируется исключение
Insert
Вставка подстроки в заданную позицию
Length
Длина строки (количество символов)
MaxCapacity
Максимальный размер буфера
Remove
Удаление подстроки из заданной позиции
Replасе
Замена всех вхождений заданной подстроки или символа новой подстрокой или символом
a.AppendFormat( "{0, 6:C} - в год {1, 6:C}", salary, salary * 12 );
Console.WriteLine( a );
a.Replace( "p.", "тыс.$" );
Console.WriteLine( "А лучше было бы: " + a ); } } }
Емкость буфера не соответствует количеству символов в строке и может увеличиваться в процессе работы программы. Программист может уменьшить размер буфера с помощью свойства Capacity, чтобы не занимать лишнюю память.