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

Java Formatter

Для создания форматированного текстового вывода предназначен класс java.util.Formatter. Этот класс обеспечивает преобразование формата, позволяющее выводить числа, строки, время и даты в любом необходимом разработчику виде.

В классе Formatter объявлен метод format(), который преобразует переданные в него параметры в строку заданного формата и сохраняет в объекте типа Formatter. Аналогичный метод объявлен у классов PrintStream и PrintWriter. Кроме того, у этих классов объявлен метод printf() с парамет­рами идентичными параметрам метода format(), который осуществ­ляет форматированный вывод в поток, тогда как метод format() сохраняет изменения в объекте типа Formatter. Таким образом, метод printf()автоматически ис­пользует возможности класса Fomatter и подобен функции printf()языка С.

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

Для создания объекта класса существует более десяти конструкторов. Ниже показаны наиболее используемые на моей практике:

Formatter()

Formatter(Appendable buf)

Formatter(Appendable buf, Locale loc)

Formatter(String filename) throws FileNotFoundException

Formatter(String filename, String charset)

throws FileNotFoundException, UnsupportedEncodingException

Formatter(File outF) throws FileNotFoundException

Formatter(OutStream outStrm)

В приведенных образцах buf задает буфер для форматированного вывода. Если параметр buf равен null, класс Formatter автоматически размещает объект типа StringBuilder для хранения форматированного вывода. Параметр loc определяет региональные и языковые настройки. Если никаких настроек не задано, используются настройки по умолчанию. Параметр filename задает имя файла, который получит форматированный вывод. Параметр charset опреде­ляет кодировку. Если она не задана, используется кодировка, установленная по умолчанию. Параметр outF передает ссылку на открытый файл, в котором будет храниться форматированный вывод. В параметре outStrm передается ссылка на поток вывода, который будет получать отформатированные данные. Если используется файл, выходные данные записываются в файл.

В классе объявлены следующие методы:

Formatter format(String fmtStringObjectargs) – форматирует аргументы, переданные в аргументе переменной длины args (коли­чество аргументов в списке вывода не фиксировано), в соответствии со спецификаторами формата, содержащимися в fmtString. Возвращает вызывающий объект;

Formatter format(Locale locString fmtString,
Objectargs) – форматирует аргументы, переданные в аргументе перемен­ной длины args, в соответствии со спецификаторами формата, содержащимися
в fmtString. При форматировании используются региональные установки, заданные в lос. Возвращает вызывающий объект;

IOException ioException() – если объект, приемник отформатирован­ного вывода, генерирует исключение типа IOException, возвращает это исключение. В противном случае возвращает null;

Locale locale() – возвращает региональные установки вызывающего объекта;

Appendable out() – возвращает ссылку на базовый объект-приемник для выходных данных;

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

void close() – закрывает вызывающий объект класса Formatter, что приводит к освобождению ресурсов, используемых объектом. После закрытия объекта типа Formatter он не может использоваться повторно. Попытка использовать закрытый объект приводит к генерации исключения типа
FormatterClosedEception;

String toString() – возвращает объект типа String, содержащий отформатированный вывод.

При форматировании используются спецификаторы формата:

Спецификатор формата Выполняемое форматирование
%a Шестнадцатеричное значение с плавающей точкой
%b Логическое (булево) значение аргумента
%c Символьное представление аргумента
%d Десятичное целое значение аргумента
%h Хэш-код аргумента
%e Экспоненциальное представление аргумента
%f Десятичное значение с плавающей точкой
%g Выбирает более короткое представление из двух:  или %f
%o Восьмеричное целое значение аргумента
%n Вставка символа новой строки
%s Строковое представление аргумента
%t Время и дата
%x Шестнадцатеричное целое значение аргумента
%% Вставка знака %

Так же возможны спецификаторы с заглавными буквами: %A (эквивалентно %a). Форматирование с их помощью обеспечивает перевод символов в верхний регистр.

 

В результате выполнения этого кода будет выведено:

This book is about

JAVA 6

 

 

В результате выполнения этого кода будет выведено:

Hex: 64, Octal: 144

0x1.90010624dd2f2p6

1000.00

1000.00 100000

1000.00 100000 1.00000e+07

1000.00 100000 1.00000e+07 1.00000e+09

Все спецификаторы для форматирования даты и времени могут употребляться только для типов longLongCalendarDate.

В таблице приведены некоторые из спецификаторов формата времени и даты.

Спецификатор формата Выполняемое преобразование
%tH Час (00 – 23)
%tI Час (1 – 12)
%tM Минуты как десятичное целое (00 – 59)
%tS Секунды как десятичное целое (00 – 59)
%tL Миллисекунды (000 – 999)
%tY Год в четырехзначном формате
%ty Год в двузначном формате (00 – 99)
%tB Полное название месяца (“Январь”)
%tb или %th Краткое название месяца (“янв”)
%tm Месяц в двузначном формате (1 – 12)
%tA Полное название дня недели (“Пятница”)
%ta Краткое название дня недели (“Пт”)
%td День в двузначном формате (1 – 31)
%tR То же что и «%tH:%tM«
%tT То же что и «%tH:%tM:%tS«
%tr То же что и «%tI:%tM:%tS %Tp» где %Tp = (AM или PM)
%tD То же что и «%tm/%td/%ty«
%tF То же что и «%tY%tm%td«
%tc То же что и «%ta %tb %td %tT %tZ %tY«

В результате выполнения этого кода будет выведено:

03:28:08 PM

Пт янв 06 15:28:08 EET 2006

3:28

Январь янв 01

Спецификатор точности применяется только в спецификаторах формата %f%gдля данных с плавающей точкой и в спецификаторе %s – для строк. Он задает количество выводимых десятичных знаков или символов. Например, спецификатор %10.4f выводит число с минимальной шириной поля 10 символов
и с четырьмя десятичными знаками. Принятая по умолчанию точность равна шести десятичным знакам.

Примененный к строкам спецификатор точности задает максимальную длину поля вывода. Например, спецификатор %5.7s выводит строку длиной не менее пяти и не более семи символов. Если строка длиннее, конечные символы отбрасываются.

Ниже приведен пример на использование флагов форматирования.

 

В результате выполнения этого кода будет выведено:

| 123,12|

|123,12 |

(100)

123 456 789,34

1111,1111

Now I know class

У класса Formatter есть полезное свойство, которое позволяет задавать аргумент, к которому следует применить конкретный спецификатор формата. По умолчанию соответствие между спецификаторами и аргументами, на которые они воздействуют, устанавливается в соответствии с порядком их следования, слева направо. Это означает, что первый спецификатор формата соответствует первому аргументу, второй спецификатор – второму аргументу и т. д. Однако, используя порядковый номер или индекс аргумента, можно указать явное соответствие спецификатора формата аргументу.

Порядковый номер аргумента указывается за знаком % в спецификаторе формата и имеет следующий формат: N$. Символ N обозначает порядковый номер нужного аргумента, нумерация аргументов начинается с единицы.

 

В результате выполнения этого кода будет выведено:

1,1 2,2 3 4

Такой же вывод легко получить, используя метод printf() в виде:

System.out.printf(«%4$.1f %2$.1f %3$d %1$d», n[0], n[1],

n[2], n[3]);

Подписаться
Уведомлять о
guest

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

0 комментариев
старым
новым колличеству голосов
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x
Leo Dev Blog | LD
Обзор конфиденциальности

На сайте используются обязательные и аналитические файлы cookie.

Обязательные cookie необходимы для корректной работы сайта.

Аналитические cookie используются для анализа посещаемости и улучшения работы сайта.

Вы можете изменить настройки использования cookie.