Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSBasicCourse2ndedPodbelsky / CSBasicCourse2ndedPodbelsky.rtf
Скачиваний:
27
Добавлен:
22.03.2016
Размер:
11.9 Mб
Скачать

8.5. Форматирование строк

При выводе, например, с помощью Console.Write() значений базовых типов

(например, int

или double) они автоматически преобразуются в символьные

строки. Если программиста не устраивает автоматически выбранный формат их

внешнего представления, он может его изменить. Для этого можно воспользоваться

статическим методом Format "метод: Format" класса string или использовать так

называемую строку форматирования "строка форматирования" в качестве первого

параметра методов, поддерживающих форматирование, например, Console.Write() и

Console.WriteLine(). В обоих случаях правила подготовки исходных данных для

получения желаемого результата (новой строки) одинаковы. Рассмотрим эти

правила применительно к методу класса string:

public static string Format(string form, params object[ ] ar).

Так как синтаксис заголовков методов (функций) мы формально ещё не

рассматривали, поясним элементы приведённого заголовка.

public – модификатор доступа. Указывает что метод открытый, т.е. доступен

вне класса string.

static – модификатор, относящий метод к классу в целом, а не к его объектам.

string – тип возвращаемого методом значения

Format – имя метода.

form – параметр, представляющий строку форматирования.

params – модификатор, указывающий, что следующий за ним массив-

параметр ar может быть заменён при обращении к функции любым количеством

аргументов (включая нуль, т.е. аргументы могут отсутствовать).

object – тип элементов массива-параметра ar. Так как object – это базовый

класс для всех типов языка C#, то аргументы, соответствующие элементам массива

object[ ] ar, могут иметь любой тип.

Итак, метод string.Format() возвращает строку, построенную на основе строки

форматирования и значений аргументов, следующих за этой строкой в обращении к

методу Format( )

.

Строка форматирования "строка форматирования" включает неизменяемые

символы и конструкции, называемые полями подстановок. Структура поля

подстановки "поля подстановок" : {N[,W][:S[R]]}, где N – номер аргумента; W -

ширина поля; S - спецификатор формата; R – спецификатор точности.

Квадратные

скобки

в

поля

подстановки

не

входят

и

обозначают

необязательность ограниченного ими фрагмента (элемента) поля. В поле

подстановки разрешено опускать все элементы кроме фигурных скобок и номера

аргумента. Именно поэтому все остальные элементы поля подстановки мы

ограничили квадратными скобками. Воспользуемся этим правилом, чтобы привести

первый пример.

int num = 23, den = 6;

string result, // ссылка на строку, с результатом

form = "Числитель: {0}, знаменатель: {1}, дробь: {0}/{1}=={2}";

result = string.Format(form, num, den, num / den);

Console.WriteLine(result);

В примере определены две ссылки result и form на объекты типа string.

Значение строки, связанной со ссылкой form, определено инициализирующей

строковой константой. В ней пять полей подстановок. Номера в полях указывают,

символьные представления значений каких (по счету, начиная с 0) аргументов будут

подставлены вместо соответствующих полей. В обращении к методу Format()

первый аргумент – строка form, затем num – аргумент, с номером 0, den – аргумент,

которому соответствует номер 1, num/den – выражение, значение которого

воспринимается как аргумент с номером 2. В результате выполнения подстановок

метод Format() возвращает строку, ссылка на которую присвоена переменной result.

Выводя эту строку на консоль, получим:

Числитель: 23, знаменатель: 6, дробь: 23/6==3

(Обратите внимание на округление результата целочисленного деления.)

В приведённом примере поля подстановок

"поля подстановок"

содержали

только номера аргументов. Разберём назначение других элементов, которые в пол

е

подстановки необязательны. Запятая и следующее за ним число (W - ширина поля)

в поле подстановки определяет количество позиций, выделяемых для изображения

подставляемого значения. Если эти элементы (запятая и число) опущены, то число

позиций определяется изображением выводимого значения, то есть ширина поля

выбирается минимально достаточной для изображения значения. Если ширина поля

указана, и она превышает длину помещаемого в поле значения, то при

положительной длине поля W значение выравнивается по правой границе. Если

перед шириной поля W стоит минус, то выравнивание выполняется по левой

границе поля.

Спецификатор формата S задаёт вид изображаемого значения. Для разных

типов данных этот спецификатор выбирается по-разному. Следующая за ним цифра

– спецификатор точности R – влияет на формируемое значение, и это влияние

зависит от спецификатора формата.

Спецификаторы формата S и точности R

Пример :

double dou = 1234.567;

Таблица 8.1.

Спецификатор S

Название формата

Роль спецификатора

точности R

С или с

Валютный

Целочисленный

Экспоненциальный

С фиксированной точкой

Число с разделителем

триад

Значение в процентах

(%)

Короткий из E или F

Шестнадцатеричный

Количество десятичных

разрядов

D или d

Минимальное число

цифр

E или e

Число разрядов после

точки

F или f

Число разрядов после

точки

N или n

P или p

G или g

Число знаков после

точки

Число знаков после

точки

Подобен E или F

X или x

Минимальное число

цифр

string form = "Спецификация Е4: {0:E4}, спецификация F4: {0:F4}";

string result = string.Format(form, dou);

Console.WriteLine(result);

В обоих полях подстановки строки форматирования опущена ширина поля, и

предполагается дважды использовать только один аргумент (с номером 0).

Выводимая строка:

Спецификация Е4: 1,2346E+003, спецификация F4: 1234,5670

Обратите внимание на округление при выводе по формату Е4 и на

дополнительный нуль в изображении числа с фиксированной точкой при выводе по

формату F4. Это определяется спецификатором точности, равным 4.

Пример с целочисленным значением, выводимым с разными основаниями в

поля из 4-х позиций. Обратите внимание, что ширина первого поля отрицательна:

int num = 23;

string form = "Основание 10: {0,-4:D}\n основание 16: {0,4:X}";

Console.WriteLine(form, num);

Результат в консольном окне:

Основание 10: 23

основание 16: 17

В

этом

примере

форматирование

выполняется

непосредственно

при

обращении к методу WriteLine(). Первый аргумент выступает в роли форматной

строки, а вызов метода string.Format() осуществляется неявно.

Если в этом примере в полях подставки указать спецификаторы точности, то в

изображениях целых чисел могут появиться незначащие нули. Пример:

int num = 23;

string form = "Основание 10: {0,-4:D3}\n основание 16: {0,4:X3}";

Console.WriteLine(form, num);

Результат:

Основание 10: 023

основание 16: 017

Примечание: если в поле подстановки указана ширина, недостаточная для

представления выводимого значения, то ширина поля будет автоматически

увеличена до необходимого количества позиций.

Соседние файлы в папке CSBasicCourse2ndedPodbelsky