Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Герберт Шилдт. Java 2, v5.0 (Tiger). Новые возм...doc
Скачиваний:
5
Добавлен:
01.03.2025
Размер:
1.21 Mб
Скачать

Флаг запятая

При выводе больших чисел часто могут оказаться полезными разделители групп, в английском языке для этого используются запятые. Например, значение 1234567 гораздо легче читать, если оно отформатировано следующим образом: 1,234,567. Для того чтобы добавить подобные разделители используйте флаг , (запятая). Код, приведенный в следующей строке:

fmt.format("%,.2f", 4356783497.34)

создаст строку, приведенную далее:

4,356,783,497.34

Флаг #

Флаг # может применяться в спецификаторах: %о, %х, %е и %f. В спецификаторах и %f флаг # гарантирует наличие десятичной точки в выводимом числе, даже если у него нет десятичных знаков. Если поставить флаг # в спецификатор формата , шестнадцатеричное представление числа будет выводиться с префиксом . Вставка флага # в спецификатор вызывает вывод числа с ведущими нулями.

Применение верхнего регистра

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

Таблица 9.5. Спецификаторы формата, набранные в верхнем регистре

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

Преобразование формата

%A

Вывод шестнадцатеричных цифр от а до f заглавными буквами a-f. Префикс 0x выводится как ОХ и символ р — как P

%B

вывод заглавными буквами значений true и false

%C

Вывод заглавной буквой соответствующего символьного аргумента

%E

Вывод символа е, обозначающего порядок числа, заглавной буквой

%G

Вывод символа е, обозначающего порядок числа, заглавной буквой

%H

Вывод шестнадцатеричных цифр от а до f заглавными буквами a— f

%S

Вывод заглавными буквами соответствующей строки

%T

Вывод всех букв в выводной строке заглавными

%X

Вывод шестнадцатеричных цифр от а до f заглавными буквами a-f. Необязательный префикс Ох выводится как Ох, если он есть

Например, вызов:

fmt.format("%X", 250);

создаст приведенную далее строку:

FA

А следующий вызов:

fmt. format* "%E\ 123.1234);

создаст приведенную далее строку:

1.231234Е+2

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

У класса Formatter есть очень полезное свойство, которое позволяет задавать аргумент, к которому следует применить конкретный спецификатор формата. Обычно соответствие между спецификаторами и аргументами, на которые они воздействуют, устанавливается в соответствии с порядком их следования, слева направо. Это означает, что первый спецификатор формата соответствует первому аргументу, второй спецификатор — второму аргументу и т. д. Однако, используя порядковый номер (argument index) или индекс аргумента, Вы можете указать явно, какой спецификатор формата соответствует какому аргументу.

Порядковый номер аргумента указан за знаком % в спецификаторе формата и имеет следующий формат:

n$

Символ n обозначает порядковый номер нужного аргумента, нумерация аргументов начинается с единицы. Рассмотрим пример:

fmt. format (" %3$d %l$d %2$ “, 10, 20, 30 )

Он формирует следующую строку вывода:

30 10 20

Листинг 9.10. Применение относительных номеров аргументов для упрощения создания пользовательского формата вывода даты и времени

import java.util.*;

class FormatDemo6 {

public static void main(String args[]) {

Formatter fmt = new Formatter();

Calendar cal = Calendar.getInstance();

fmt.format("Today is day %te of %<tB, %<tY", cal);

System.out.println(fmt);

}

}

В следующей строке приведен вывод результатов работы программы из листинга 9.10:

Today is day 8 of may, 2004

Благодаря относительному индексированию аргумент cal нужно передать всего один раз вместо трех.