Назад Зміст Вперед

2.4 Клас Formatter. Форматоване виведення чисел та грошових даних

Форматування виведення за допомогою класу Formatter


Базовою частиною підтримки створення форматованого виведення в мові Java служить клас Formatter, включений в пакет java.util. Він забезпечує перетворення формату (format conversions) що дозволяють виводити числа, рядки і час і дати практично у будь-якому вподобаному вам форматі.Окрім класу Formatter в Java 2 версії 5.0 доданий метод printf () для класів printstream і printwriter. Метод printf () автоматично використовує клас Formatter.

Конструктори класу Formatter

Перш ніж Ви зможете використати клас Formatter для форматування висновку, Вам доведеться створити об'єкт типу Formatter. Загалом, клас Formatter перетворить двійкову форму представлення даних, використовуваних програмою, у форматований текст. Він зберігає форматований текст у буфері, вміст якого Ваша програма може отримати у будь-який потрібний момент. Можна надати класу Formatter автоматичну підтримку цього буфера, або явно задати його, коли створюється об'єкт класу 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 передається посилання на потік виведення, яке отримуватиме дані, що відформатували. Якщо використовується файл, вихідні дані також записуються у файл.

Можливо, найширше використовуваний конструктор, перший в приведеному переліку, - це конструктор без параметрів. Він використовує регіональні налаштування, прийняті за умовчанням, і автоматично розміщує об'єкт класу StringBuilder для зберігання форматованого виведення

Методи класу Formatter

Методи класу Formatter
void close ()
Закриває викликаний об'єкт класу Formatter. Це призводить до звільнення ресурсів, використовуваних об'єктом. Після закриття об'єкту типу Formatter, він не може повторно використовуватися. Спроба використати закритий об'єкт призводить до генерації виключення типу FormatterClosedException.
void flush () 
Очищає буфер відформатованих даних. У результаті всі дані, що знаходяться у буфері, виводяться за місцем призначення. Цей метод викликається в основному для об'єкту типу Formatter, пов'язаного з файлом.
Formatter format (String fmtString, Object...args)
Форматує аргументи, передані в аргументі змінної довжини (vararg) args, відповідно до специфікаторів формату, що містяться в fmtString. Повертає викликаний об'єкт.
Formatter format (Locale loc, String fmtString, Object...args) 
Форматує аргументи, передані в аргументі змінної довжини args, відповідно до специфікаторів формату, що містяться в fmtString. При форматуванні використовуються регіональні налаштування, задані в lос. Повертає викликаний об'єкт.
IOException ioException()
Якщо об'єкт, приймач форматованого виведення, то генерує виключення типу IOException, повертає це виключення. В протилежному випадку повертає null.
Locale locale() 
Повертає регіональні налаштування викликаного об'єкту.
Appendable out () 
Повертає посилання на базовий об'єкт-приймач для вихідних даних.
String toString()
Повертає об'єкт типу String, що містить відформатоване виведення.

Параметр outStrm специфікує посилання на вихідний потік, який прийме виведення. 

Formatter визначає методи, перераховані в таблиці вище за виключенням ioException (), кожна спроба використати один з цих методів після екземпляра Formatter, який був раніше закритий, дасть в результаті FormatterClosedException.


String.format

У метод String.format першим параметром передається рядок-шаблон, в якій, на місцях, в які ми хочемо підставити значення, записуються спеціальні символи: %s, %d. 
Після рядка-шаблону передаються параметри, значення яких і будуть підставлені на місце символів  %s, %d. Якщо треба підставити рядок ми пишемо %s, якщо число - %d.
Приклад
Результат виведення
String s = String.format("a=%d, b=%d, c=%d", 1, 4, 3);
s буде  рівна «a=1, b=4, c=3»
int a = -1, b = 4, c = 3;
String template;
 if (a<0)
  template = "Warning! a=%d, b=%d, c=%d";
 else
  template = "a=%d, b=%d, c=%d";
System.out.println(String.format(template, a, b, c) );
Warning! a=-1, b=4, c=3

Інші типи даних методу format

Позначення
Тип
%s
String
%d
цілое число: int, long, ...
%f
дійсне число: float, double
%b
boolean
%c
char
%t
Date
%%
Символ %

>>java.util Class Formatter

.