Класс Formatter

Все реализованные интерфейсы:
Closeable, Flushable, AutoCloseable
public final class Formatter
extends Object
implements Closeable, Flushable

Интерпретатор строк формата в стиле printf. Этот класс предоставляет поддержку выравнивания и размещения элементов, общих форматов для числовых, строковых и данных даты/времени, а также локально-зависимого вывода. Поддерживаются стандартные типы Java, такие как byte, BigDecimal и Calendar. Предоставляется ограниченная настройка форматирования для произвольных типов пользователей через интерфейс Formattable.

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

Форматированный вывод для языка Java сильно вдохновлен printf, используемым в C. Хотя строки формата аналогичны строкам C, были внесены некоторые изменения для адаптации к языку Java и использования некоторых его особенностей. Кроме того, форматирование Java более строгое, чем в C; например, если преобразование несовместимо с флагом, будет брошено исключение. В C неподходящие флаги игнорируются без ошибок. Поэтому строки формата предназначены для распознавания программистами C, но не обязательно полностью совместимы с теми, что используются в C.

Примеры ожидаемого использования:

StringBuilder sb = new StringBuilder();
// Send all output to the Appendable object sb
Formatter formatter = new Formatter(sb, Locale.US);

// Explicit argument indices may be used to re-order output.
formatter.format("%4$2s %3$2s %2$2s %1$2s", "a", "b", "c", "d")
// -> " d  c  b  a"

// Optional locale as the first argument can be used to get
// locale-specific formatting of numbers.  The precision and width can be
// given to round and align the value.
formatter.format(Locale.FRANCE, "e = %+10.4f", Math.E);
// -> "e =    +2,7183"

// The '(' numeric flag may be used to format negative numbers with
// parentheses rather than a minus sign.  Group separators are
// automatically inserted.
formatter.format("Amount gained or lost since last statement: $ %(,.2f",
                 balanceDelta);
// -> "Amount gained or lost since last statement: $ (6,217.58)"

Для распространенных запросов форматирования существуют удобные методы, как показано в следующих вызовах:

// Writes a formatted string to System.out.
System.out.format("Local time: %tT", Calendar.getInstance());
// -> "Local time: 13:34:18"

// Writes formatted output to System.err.
System.err.printf("Unable to open file '%1$s': %2$s",
                  fileName, exception.getMessage());
// -> "Unable to open file 'food': No such file or directory"

Как в C, строки могут быть отформатированы с использованием статического метода String.format:

// Format a string containing a date.
import java.util.Calendar;
import java.util.GregorianCalendar;
import static java.util.Calendar.*;

Calendar c = new GregorianCalendar(1995, MAY, 23);
String s = String.format("Duke's Birthday: %1$tb %1$te, %1$tY", c);
// -> s == "Duke's Birthday: May 23, 1995"

Организация

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

Обзор

Эта часть предназначена для краткого обзора понятий форматирования. Для получения подробных сведений о поведении обратитесь к разделу Подробности.

Синтаксис строк формата

Каждый метод, который производит отформатированный вывод, требует строки формата и список аргументов. Строка формата — это String, которая может содержать фиксированный текст и один или несколько встроенных спецификаторов формата. Рассмотрим следующий пример:

Calendar c = ...;
String s = String.format("Duke's Birthday: %1$tm %1$te,%1$tY", c);
Эта строка формата является первым аргументом метода format. Она содержит три спецификатора формата "%1$tm", "%1$te" и "%1$tY", которые указывают, как должны обрабатываться аргументы и куда они должны быть вставлены в текст. Остальные части строки формата являются фиксированным текстом, включая "Dukes Birthday: " и любые другие пробелы или знаки препинания. Список аргументов состоит из всех аргументов, переданных методу после строки формата. В приведенном выше примере список аргументов имеет размер один и состоит из объекта Calendar c.
  • Спецификаторы формата для общих, символьных и числовых типов имеют следующий синтаксис:
    %[argument_index$][flags][width][.precision]conversion

    Необязательный индекс_аргумента — это десятичное целое число, указывающее позицию аргумента в списке аргументов. Первый аргумент обозначается "1$", второй — "2$" и т. д.

    Необязательный флаги — это набор символов, изменяющих формат вывода. Набор допустимых флагов зависит от преобразования.

    Необязательная ширина — это положительное десятичное целое число, указывающее минимальное количество символов, которое должно быть записано в вывод.

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

    Необходимое преобразование — это символ, указывающий, как должен быть отформатирован аргумент. Набор допустимых преобразований для данного аргумента зависит от типа данных аргумента.

  • Спецификаторы формата для типов, используемых для представления дат и времени, имеют следующий синтаксис:
    %[argument_index$][flags][width]conversion

    Необязательные индекс_аргумента, флаги и ширина определены как указано выше.

    Необходимое преобразование — это последовательность из двух символов. Первый символ — это 't' или 'T'. Второй символ указывает используемый формат. Эти символы аналогичны, но не полностью идентичны, тем, что определены GNU date и POSIX strftime(3c).

  • Спецификаторы формата, которые не соответствуют аргументам, имеют следующий синтаксис:
    %[flags][width]conversion

    Необязательные флаги и ширина определены как указано выше.

    Необходимое преобразование — это символ, указывающий содержимое, которое необходимо вставить в вывод.

Преобразования

Преобразования делятся на следующие категории:

  1. Общие - может быть применено к любому типу аргумента
  2. Символ - может быть применено к основным типам, которые представляют символы Юникода: char, Character, byte, Byte, short, и Short. Это преобразование также может быть применено к типам int и Integer, когда Character.isValidCodePoint(int) возвращает true
  3. Числовой
    1. Целый - может быть применено к целочисленным типам Java: byte, Byte, short, Short, int и Integer, long, Long, и BigInteger (но не char или Character)
    2. Число с плавающей точкой - может быть применено к типам чисел с плавающей точкой Java: float, Float, double, Double, и BigDecimal
  4. Дата/Время - может быть применено к типам Java, которые могут кодировать дату или время: long, Long, Calendar, Date и TemporalAccessor
  5. Процент - генерирует литерал '%' ('\u0025')
  6. Разделитель строк - генерирует разделитель строк, специфичный для платформы

Для категорий Общие, Символ, Числовой, Целый и Дата/Время преобразования, если не указано иное, если аргумент arg равен null, то результат равен "null".

В следующей таблице приведены поддерживаемые преобразования. Преобразования, обозначенные прописной буквой (т.е. 'B', 'H', 'S', 'C', 'X', 'E', 'G', 'A', и 'T') такие же, как и соответствующие строчные преобразования, за исключением того, что результат преобразуется в верхний регистр в соответствии с правилами текущего Locale. Если явное расположение не указано, либо при создании экземпляра, либо в качестве параметра вызова его метода, то используется default locale.

Преобразование Категория аргумента Описание
'b', 'B' общий Если аргумент arg имеет значение null, то результатом является "false". Если arg является boolean или Boolean, то результатом является строка, возвращаемая методом String.valueOf(arg). В противном случае результатом является "true".
'h', 'H' общий Результат получается путем вызова Integer.toHexString(arg.hashCode()).
's', 'S' общий Если arg реализует интерфейс Formattable, то вызывается метод arg.formatTo. В противном случае результат получается путем вызова arg.toString().
'c', 'C' символ Результатом является символ Юникода
'd' целое Результат форматируется как десятичное целое число
'o' целое Результат форматируется как восьмеричное целое число
'x', 'X' целое Результат форматируется как шестнадцатеричное целое число
'e', 'E' с плавающей точкой Результат форматируется как десятичное число в компьютерной научной нотации
'f' с плавающей точкой Результат форматируется как десятичное число
'g', 'G' с плавающей точкой Результат форматируется с использованием компьютерной научной нотации или десятичного формата, в зависимости от точности и значения после округления.
'a', 'A' с плавающей точкой Результат форматируется как шестнадцатеричное число с плавающей точкой с мантиссой и показателем степени. Это преобразование не поддерживается для типа BigDecimal, несмотря на то, что последний находится в категории аргументов с плавающей точкой.
't', 'T' дата/время Префикс для символов преобразования даты и времени. См. Преобразования дат/времени.
'%' процент Результат — литерал '%' ('\u0025')
'n' разделитель строк Результатом является разделитель строк, специфичный для платформы

Любые символы, не определённые явно как преобразования, являются недопустимыми и зарезервированы для будущих расширений.

Преобразования дат/времени

Для преобразований 't' и 'T' определены следующие суффиксные символы преобразования даты и времени. Типы аналогичны, но не полностью идентичны, типам, определённым в GNU date и POSIX strftime(3c). Дополнительные типы преобразований предоставляются для доступа к функциональности, специфичной для Java (например, 'L' для миллисекунд в секунде).

Следующие символы преобразования используются для форматирования времени:

'H' Час для 24-часового формата, отформатирован как двузначное число с ведущим нулем, если необходимо, например, 00 - 23.
'I' Час для 12-часового формата, отформатирован как двузначное число с ведущим нулем, если необходимо, например, 01 - 12.
'k' Час для 24-часового формата, например, 0 - 23.
'l' Час для 12-часового формата, например, 1 - 12.
'M' Минута в часе, отформатирована как двузначное число с ведущим нулем, если необходимо, например, 00 - 59.
'S' Секунды в минуте, отформатированы как двузначное число с ведущим нулем, если необходимо, например, 00 - 60 ("60" — специальное значение, необходимое для поддержки високосных секунд).
'L' Миллисекунда в секунде, отформатирована как трехзначное число с ведущими нулями, если необходимо, например, 000 - 999.
'N' Наносекунда в секунде, отформатирована как девятизначное число с ведущими нулями, если необходимо, например, 000000000 - 999999999.
'p' Маркер утреннего или дневного времени, специфичный для локалей, в нижнем регистре, например, "am" или "pm". Использование префикса преобразования 'T' принудительно переводит этот вывод в верхний регистр.
'z' Численный смещение часового пояса от GMT в стиле RFC 822, например, -0800. Это значение будет скорректировано при необходимости для летнего времени. Для long, Long, и Date используется часовой пояс по умолчанию для текущей виртуальной машины Java.
'Z' Строка, представляющая сокращение часового пояса. Это значение будет скорректировано при необходимости для летнего времени. Для long, Long, и Date используется часовой пояс по умолчанию для текущей виртуальной машины Java. Локаль Formatter переопределяет локаль аргумента (если таковая имеется).
's' Секунды с начала эпохи, начиная с 1 января 1970 года 00:00:00 UTC, т.е. Long.MIN_VALUE/1000 до Long.MAX_VALUE/1000.
'Q' Миллисекунды с начала эпохи, начиная с 1 января 1970 года 00:00:00 UTC, т.е. Long.MIN_VALUE до Long.MAX_VALUE.

Следующие символы преобразования используются для форматирования дат:

'B' Месяц в полном формате, специфичный для локали, например "January", "February".
'b' Сокращенное название месяца, специфичное для локали, например "Jan", "Feb".
'h' То же, что и 'b'.
'A' Полное название дня недели, специфичное для локали, например "Sunday", "Monday"
'a' Сокращенное название дня недели, специфичное для локали, например "Sun", "Mon"
'a' Четырехзначный год, разделённый на 100, отформатированный как двузначное число с ведущим нулём при необходимости, например 00 - 99
'Y' Год, отформатированный как минимум четырьмя знаками с ведущими нулями по необходимости, например 0092 равно 92 CE для григорианского календаря.
'y' Последние две цифры года, отформатированные с ведущими нулями по необходимости, например 00 - 99.
'j' День года, отформатированный как трёхзначное число с ведущими нулями по необходимости, например 001 - 366 для григорианского календаря.
'm' Месяц, отформатированный как двузначное число с ведущим нулём при необходимости, например 01 - 13.
'd' День месяца, отформатированный как двузначное число с ведущим нулём при необходимости, например 01 - 31
'e' День месяца, отформатированный как двузначное число, например 1 - 31.

Для форматирования распространённых даты/временных композиций используются следующие символы преобразования.

'R' Время, отформатированное для 24-часового формата как "%tH:%tM"
'T' Время, отформатированное для 24-часового формата как "%tH:%tM:%tS".
'r' Время, отформатированное для 12-часового формата как "%tI:%tM:%tS %Tp". Положение маркера утра или дня ('%Tp') может зависеть от локали.
'D' Дата, отформатированная как "%tm/%td/%ty".
'F' Полная дата в формате ISO 8601, отформатированная как "%tY-%tm-%td".
'c' Дата и время, отформатированные как "%ta %tb %td %tT %tZ %tY", например "Sun Jul 20 16:17:00 EDT 1969".

Любые символы, не явно определённые как суффиксы преобразования даты/времени, являются недопустимыми и зарезервированы для будущих расширений.

Флаги

В следующей таблице представлены поддерживаемые флаги. y означает, что флаг поддерживается для указанных типов аргументов.

Флаг Общий Символ Целое Число с плавающей точкой Дата/Время Описание
'-' д д д д д Результат будет выровнен влево.
'#' д1 - д3 д - Результат должен использовать альтернативную форму, зависящую от преобразования
'+' - - д4 д - Результат всегда будет содержать знак
' ' - - д4 д - Результат будет содержать ведущий пробел для положительных значений
'0' - - д д - Результат будет дополнен нулями
',' - - д2 д5 - Результат будет содержать разделители группировки, специфичные для локали разделители группировки
'(' - - д4 д5 - Результат будет заключать отрицательные числа в скобки

1 Зависит от определения Formattable.

2 Только для преобразования 'd'.

3 Только для преобразований 'o', 'x', и 'X'.

4 Для преобразований 'd', 'o', 'x', и 'X', примененных к BigInteger или 'd', примененных к byte, Byte, short, Short, int и Integer, long, и Long.

5 Только для преобразований 'e', 'E', 'f', 'g', и 'G'.

Любые символы, не определенные явно как флаги, являются недопустимыми и зарезервированы для будущих расширений.

Ширина

Ширина — это минимальное количество символов, которые должны быть записаны в выходной поток. Для преобразования разделителя строки ширина неприменима; если она задана, будет выброшено исключение.

Точность

Для общих типов аргументов точность — это максимальное количество символов, которое должно быть записано в выходной поток.

Для преобразований чисел с плавающей точкой 'a', 'A', 'e', 'E', и 'f' точность — это количество цифр после десятичной точки. Если преобразование равно 'g' или 'G', то точность — это общее количество цифр в полученном значении после округления.

Для символьных, целочисленных и типов аргументов даты/времени, а также для преобразований процентов и разделителей строк точность неприменима; если точность задана, будет выброшено исключение.

Индекс аргумента

Индекс аргумента — это целое десятичное число, указывающее позицию аргумента в списке аргументов. Первый аргумент обозначается «1$», второй — «2$» и т. д.

Другой способ ссылки на аргументы по позиции — использование флага '<' ('\u003c'), который вызывает повторное использование аргумента для предыдущего спецификатора формата. Например, следующие два оператора создадут идентичные строки:

Calendar c = ...;
String s1 = String.format("Duke's Birthday: %1$tm %1$te,%1$tY", c);

String s2 = String.format("Duke's Birthday: %1$tm %<te,%<tY", c);

Подробности

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

Любые символы, не явно определенные как преобразования, суффиксы преобразования даты/времени или флаги, являются недопустимыми и зарезервированы для будущих расширений. Использование такого символа в строке формата приведет к возникновению UnknownFormatConversionException или UnknownFormatFlagsException.

Если спецификатор формата содержит ширину или точность с недопустимым значением или если они не поддерживаются, то соответственно будут брошены IllegalFormatWidthException или IllegalFormatPrecisionException.

Если спецификатор формата содержит символ преобразования, который не применим к соответствующему аргументу, то будет брошено IllegalFormatConversionException.

Все указанные исключения могут быть брошены любыми из format методов Formatter, а также любыми format вспомогательными методами, такими как String.format и PrintStream.printf.

Для категорий Общие, Символьные, Числовые, Целочисленные и Дата/Время преобразований, если не указано иное, если аргумент arg равен null, то результатом является "null".

Преобразования, обозначенные заглавным символом (т.е. 'B', 'H', 'S', 'C', 'X', 'E', 'G', 'A', и 'T'), аналогичны преобразованиям соответствующих строчных символов, за исключением того, что результат преобразуется в верхний регистр в соответствии с правилами текущей Locale. Если явных правил локализации не указано при создании экземпляра или в качестве параметра вызова метода, то используется default locale.

Общие

Следующие общие преобразования могут быть применены к любому типу аргумента:

'b' '\u0062' Возвращает либо "true", либо "false", как возвращает Boolean.toString(boolean).

Если аргумент равен null, то результатом является "false". Если аргумент является boolean или Boolean, то результатом является строка, возвращаемая String.valueOf(). В противном случае результатом является "true".

Если задан флаг '#', то будет брошено FormatFlagsConversionMismatchException.

'B' '\u0042' Версия в верхнем регистре 'b'.
'h' '\u0068' Возвращает строку, представляющую хэш-код объекта.

Результат получается путем вызова Integer.toHexString(arg.hashCode()).

Если задан флаг '#', то будет брошено FormatFlagsConversionMismatchException.

'H' '\u0048' Версия в верхнем регистре 'h'.
's' '\u0073' Возвращает строку.

Если аргумент реализует Formattable, то вызывается его метод formatTo. В противном случае результат получается путем вызова метода toString() аргумента.

Если задан флаг '#' и аргумент не является Formattable, то будет брошено FormatFlagsConversionMismatchException.

'S' '\u0053' Версия в верхнем регистре 's'.

Следующие флаги применяются к общим преобразованиям:

'-' '\u002d' Выравнивает вывод по левому краю. Пробелы ('\u0020') будут добавляться в конец преобразованного значения по мере необходимости, чтобы заполнить минимальную ширину поля. Если ширина не указана, будет выброшено исключение MissingFormatWidthException. Если этот флаг не задан, вывод будет выровнен по правому краю.
'#' '\u0023' Требует использования альтернативной формы вывода. Определение формы задается преобразованием.

Ширина width — это минимальное количество символов, которые должны быть записаны в выходные данные. Если длина преобразованного значения меньше ширины, вывод будет дополнен '  ' ('\u0020') до тех пор, пока общее количество символов не станет равным ширине. По умолчанию выравнивание производится по левому краю. Если указан флаг '-', то выравнивание будет осуществляться по правому краю. Если ширина не указана, минимального значения нет.

Точность — это максимальное количество символов, которые должны быть записаны в выходные данные. Точность применяется перед шириной, поэтому вывод будет усечен до precision символов, даже если ширина больше точности. Если точность не указана, нет явного ограничения на количество символов.

Символ

Это преобразование может быть применено к char и Character. Оно также может быть применено к типам byte, Byte, short, и Short, int и Integer, когда Character.isValidCodePoint(int) возвращает значение true. Если оно возвращает false, то будет выброшено исключение IllegalFormatCodePointException.
'c' '\u0063' Форматирует аргумент как символ Юникода, как описано в Представление символов Юникода. В случае, если аргумент представляет дополнительный символ, это может быть более одного 16-битного char.

Если указан флаг '#', то будет выброшено исключение FormatFlagsConversionMismatchException.

'C' '\u0043' Версия 'c' в верхнем регистре.

Применяется флаг '-' , определенный для Общие преобразования. Если задан флаг '#', то будет выброшено исключение FormatFlagsConversionMismatchException.

Ширина определяется так же, как и для Общих преобразований.

Точность не применяется. Если точность указана, будет выброшено исключение IllegalFormatPrecisionException.

Числовые

Числовые преобразования делятся на следующие категории:

  1. Байт, Короткий, Целое и Длинное
  2. BigInteger
  3. Float и Double
  4. BigDecimal

Числовые типы будут форматироваться в соответствии с следующим алгоритмом:

Алгоритм локализации чисел

После получения цифр для целой части, дробной части и показателя степени (в соответствии с типом данных), применяется следующее преобразование:

  1. Каждый цифровой символ d в строке заменяется цифрой, специфичной для текущего языка, вычисленной относительно нулевой цифры z текущего языка; то есть d - '0' + z.
  2. Если присутствует десятичный разделитель, используется десятичный разделитель, специфичный для текущего языка.
  3. Если задан флаг ',' ('\u002c'), то специфичный для языка разделитель группировки вставляется, сканируя целую часть строки с наименее значимой до наиболее значимой цифры и вставляя разделитель через интервалы, определённые размером группировки языка.
  4. Если задан флаг '0', то специфичные для языка нулевые цифры вставляются после символа знака, если он есть, и перед первой ненулевой цифрой, пока длина строки не станет равной требуемой ширине поля.
  5. Если значение отрицательное, и задан флаг '(', то префикс '(' ('\u0028') добавляется в начало, а суффикс ')' ('\u0029') добавляется в конец.
  6. Если значение отрицательное (или дробное отрицательное ноль) и флаг '(' не задан, то префикс '-' ('\u002d') добавляется в начало.
  7. Если задан флаг '+' и значение положительное или ноль (или дробное положительное ноль), то префикс '+' ('\u002b') будет добавлен в начало.

Если значение равно NaN или положительной бесконечности, соответственно будут выведены строковые литералы "NaN" или "Infinity". Если значение равно отрицательной бесконечности, то вывод будет "(Infinity)", если задан флаг '(', в противном случае вывод будет "-Infinity". Эти значения не локализованы.

Байты, Короткие целые, Целые и Длинные

Следующие преобразования могут быть применены к byte, Byte, short, Short, int и Integer, long, и Long.

'd' '\u0064' Форматирует аргумент в виде целого десятичного числа. Применяется алгоритм локализации.

Если указан флаг '0' и значение отрицательное, то нули будут добавлены после знака.

Если указан флаг '#', то будет выброшено исключение FormatFlagsConversionMismatchException.

'o' '\u006f' Форматирует аргумент в виде целого числа в восьмеричной системе счисления. Локализация не применяется.

Если x отрицательное, результат будет беззнаковым значением, полученным путём добавления 2n к значению, где n — количество битов в типе, возвращаемое статическим полем SIZE в классах Byte, Short, Integer или Long соответственно.

Если указан флаг '#', вывод всегда будет начинаться с индикатора основания '0'.

Если указан флаг '0', вывод будет дополнен ведущими нулями до ширины поля после любого указания знака.

Если указаны флаги '(', '+', ' ', или ',', то будет выброшено исключение FormatFlagsConversionMismatchException.

'x' '\u0078' Форматирует аргумент в виде целого числа в шестнадцатеричной системе счисления. Локализация не применяется.

Если x отрицательное, результат будет беззнаковым значением, полученным путём добавления 2n к значению, где n — количество битов в типе, возвращаемое статическим полем SIZE в классах Byte, Short, Integer или Long соответственно.

Если указан флаг '#', вывод всегда будет начинаться с индикатора основания "0x".

Если указан флаг '0', вывод будет дополнен ведущими нулями до ширины поля после индикатора основания или знака (если он есть).

Если указаны флаги '(', '  ', '+', или ',', то будет выброшено исключение FormatFlagsConversionMismatchException.

'X' '\u0058' Версия 'x' с заглавными буквами. Весь строковый результат, представляющий число, будет преобразован к заглавному регистру, включая 'x' (если есть) и все шестнадцатеричные цифры 'a' - 'f' ('\u0061' - '\u0066').

Если преобразование выполняется в 'o', 'x', или 'X', и указаны флаги '#' и '0', результат будет содержать индикатор основания ('0' для восьмеричной и "0x" или "0X" для шестнадцатеричной), определённое количество нулей (в зависимости от ширины) и значение.

Если флаг '-' не указан, отступ с пробелами будет добавлен перед знаком.

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

'+' '\u002b' Требуется, чтобы вывод содержал знак плюс для всех положительных чисел. Если этот флаг не задан, то знак будет только у отрицательных значений.

Если оба флага '+' и '  ' заданы, будет брошено исключение IllegalFormatFlagsException.

'  ' '\u0020' Требуется, чтобы вывод содержал один дополнительный пробел ('\u0020') для неотрицательных значений.

Если оба флага '+' и '  ' заданы, будет брошено исключение IllegalFormatFlagsException.

'0' '\u0030' Требуется, чтобы вывод был дополнен ведущими нулями до минимальной ширины поля после любого знака или разделителя разрядов, за исключением случаев преобразования NaN или бесконечности. Если ширина не указана, будет брошено исключение MissingFormatWidthException.

Если оба флага '-' и '0' заданы, будет брошено исключение IllegalFormatFlagsException.

',' '\u002c' Требуется, чтобы вывод включал разделители групп, специфичные для языка ('(') как описано в разделе "группировка" алгоритма локализации.
'(' '\u0028' Требуется, чтобы вывод начинался с символа '(' ('\u0028') и заканчивался символом ')' ('\u0029') для отрицательных значений.

Если нет флагов, используется форматирование по умолчанию:

  • Вывод выравнивается по правому краю в рамках width
  • Отрицательные числа начинаются со знака '-' ('\u002d')
  • Положительные числа и ноль не содержат знака или дополнительного пробела
  • Разделители групп не включаются

Ширина ('\u0020') - это минимальное количество символов, которые должны быть выведены. Это включает в себя знаки, цифры, разделители групп, разделитель разрядов и скобки. Если длина преобразованного значения меньше ширины, вывод дополняется пробелами ('\u0020') до тех пор, пока общее количество символов не станет равно ширине. По умолчанию выравнивание по левому краю. Если задан флаг '-', выравнивание будет по правому краю. Если ширина не указана, то минимальное количество символов отсутствует.

Точность не применима. Если точность указана, будет брошено исключение IllegalFormatPrecisionException.

BigInteger

Следующие преобразования могут быть применены к BigInteger.

'd' '\u0064' Требуется, чтобы вывод был отформатирован как целое десятичное число. Применяется алгоритм локализации алгоритм локализации.

Если установлен флаг '#', будет выброшено исключение FormatFlagsConversionMismatchException.

'o' '\u006f' Требуется, чтобы вывод был отформатирован как целое число в восьмеричной системе счисления. Локализация не применяется.

Если x отрицательно, результат будет со знаком, начинающимся с '-' ('\u002d'). Подпись вывода разрешена для этого типа, потому что, в отличие от примитивных типов, невозможно создать беззнаковый эквивалент без предположения явного размера типа данных.

Если x положительно или равно нулю, и установлен флаг '+', результат начнется с '+' ('\u002b').

Если установлен флаг '#', вывод всегда будет начинаться с префикса '0'.

Если установлен флаг '0', вывод будет дополнен ведущими нулями до ширины поля после любого указания знака.

Если установлен флаг ',', будет выброшено исключение FormatFlagsConversionMismatchException.

'x' '\u0078' Требуется, чтобы вывод был отформатирован как целое число в шестнадцатеричной системе счисления. Локализация не применяется.

Если x отрицательно, результат будет со знаком, начинающимся с '-' ('\u002d'). Подпись вывода разрешена для этого типа, потому что, в отличие от примитивных типов, невозможно создать беззнаковый эквивалент без предположения явного размера типа данных.

Если x положительно или равно нулю, и установлен флаг '+', результат начнется с '+' ('\u002b').

Если установлен флаг '#', вывод всегда будет начинаться с индикатора основания "0x".

Если установлен флаг '0', вывод будет дополнен ведущими нулями до ширины поля после индикатора основания или знака (если он присутствует).

Если установлен флаг ',', будет выброшено исключение FormatFlagsConversionMismatchException.

'X' '\u0058' Версия в верхнем регистре 'x'. Весь строковый текст, представляющий число, будет преобразован в верхний регистр, включая 'x' (если он есть) и все шестнадцатеричные цифры 'a' - 'f' ('\u0061' - '\u0066').

Если преобразование 'o', 'x', или 'X' и установлены флаги '#' и '0', результат будет содержать индикатор основания ('0' для восьмеричного и "0x" или "0X" для шестнадцатеричного), несколько нулей (в зависимости от ширины) и значение.

Если установлен флаг '0' и значение отрицательно, заполнение нулями будет происходить после знака.

Если флаг '-' не установлен, заполнение пробелами будет происходить перед знаком.

Все флаги, определенные для Byte, Short, Integer и Long, применяются. Поведение по умолчанию при отсутствии флагов такое же, как для Byte, Short, Integer и Long.

Определение ширины такое же, как определено для Byte, Short, Integer и Long.

Точность не применима. Если точность указана, будет выброшено исключение IllegalFormatPrecisionException.

Float и Double

Следующие преобразования могут быть применены к float, Float, double и Double.

'e' '\u0065' Требует, чтобы вывод был отформатирован с использованием компьютерной научной нотации. Применяется алгоритм локализации.

Форматирование величины m зависит от ее значения.

Если m равно NaN или бесконечности, будут выведены строковые значения "NaN" или "Infinity" соответственно. Эти значения не локализуются.

Если m равно положительному или отрицательному нулю, тогда показатель степени будет "+00".

В противном случае результат — строка, представляющая знак и величину (абсолютное значение) аргумента. Форматирование знака описано в алгоритме локализации. Форматирование величины m зависит от ее значения.

Пусть n — единственное целое число такое, что 10n <= m < 10n+1; затем пусть a — математически точное частное от деления m на 10n, так что 1 <= a < 10. Величина затем представляется как целая часть a, как одна десятичная цифра, за которой следует десятичный разделитель, за которым следуют десятичные цифры, представляющие дробную часть a, за которым следует символ показателя 'e' ('\u0065'), за которым следует знак показателя, за которым следует представление n как десятичного целого числа, полученное методом Long.toString(long, int), и дополненное нулями до включения как минимум двух цифр.

Количество цифр в результате для дробной части m или a равно точности. Если точность не указана, то значение по умолчанию — 6. Если точность меньше, чем количество цифр, которое будет отображаться после десятичной точки в строке, возвращаемой Float.toString(float) или Double.toString(double) соответственно, тогда значение будет округлено с использованием алгоритма округления до ближайшего целого. В противном случае нули могут быть добавлены для достижения точности. Для канонического представления значения используйте Float.toString(float) или Double.toString(double) соответственно.

Если флаг ',' задан, то будет брошено исключение FormatFlagsConversionMismatchException.

'E' '\u0045' Версия с прописными буквами 'e'. Символ показателя будет 'E' ('\u0045').
'g' '\u0067' Требует, чтобы вывод был отформатирован в общем научном формате, как описано ниже. Применяется алгоритм локализации.

После округления для точности, форматирование результирующей величины m зависит от ее значения.

Если m больше или равно 10-4, но меньше 10точность, тогда оно представляется в десятичном формате.

Если m меньше 10-4 или больше или равно 10точность, тогда оно представляется в компьютерной научной нотации.

Общее количество значащих цифр в m равно точности. Если точность не указана, то значение по умолчанию — 6. Если точность 0, тогда она принимается равной 1.

Если флаг '#' задан, то будет брошено исключение FormatFlagsConversionMismatchException.

'G' '\u0047' Версия с прописными буквами 'g'.
'f' '\u0066' Требуется, чтобы вывод был отформатирован с использованием десятичного формата. Применяется алгоритм локализации.

Результатом является строка, представляющая знак и модуль (абсолютное значение) аргумента. Форматирование знака описано в алгоритме локализации. Форматирование модуля m зависит от его значения.

Если m NaN или бесконечно, будут выведены литеральные строки "NaN" или "Infinity" соответственно. Эти значения не локализованы.

Модуль форматируется как целая часть m без ведущих нулей, за которой следует десятичная разделитель, за которым следуют одна или несколько десятичных цифр, представляющих дробную часть m.

Количество цифр в результате для дробной части m или a равно точности. Если точность не указана, значение по умолчанию равно 6. Если точность меньше числа цифр, которые появились бы после десятичной точки в строке, возвращаемой Float.toString(float) или Double.toString(double) соответственно, то значение будет округлено с использованием алгоритма округления «округлить до ближайшего целого вверх». В противном случае к результату могут быть добавлены нули для достижения точности. Для канонического представления значения используйте Float.toString(float) или Double.toString(double) соответственно.

'a' '\u0061' Требуется, чтобы вывод был отформатирован в шестнадцатеричной экспоненциальной форме. Локализация не применяется.

Результатом является строка, представляющая знак и модуль (абсолютное значение) аргумента x.

Если x отрицательный или отрицательное нулевое значение, то результат будет начинаться с '-' ('\u002d').

Если x положительный или положительное нулевое значение, и флаг '+' задан, то результат будет начинаться с '+' ('\u002b').

Форматирование модуля m зависит от его значения.

  • Если значение NaN или бесконечно, будут выведены литеральные строки "NaN" или "Infinity" соответственно.
  • Если m равно нулю, то оно представляется строкой "0x0.0p0".
  • Если m имеет значение с нормализованным представлением, то для представления значащей части и поля экспоненты используются подстроки. Значащая часть представляется символами "0x1.", за которыми следует шестнадцатеричное представление остальной части значащей части как дроби. Экспонента представляется символами 'p' ('\u0070') и за ними следует десятичная строка несмещенной экспоненты, как если бы она была получена путём вызова Integer.toString для значения экспоненты. Если точность указана, значение округляется до заданного числа шестнадцатеричных цифр.
  • Если m имеет значение с субнормализованным представлением, то, если точность не задана в диапазоне от 1 до 12 включительно, значащая часть представляется символами '0x0.' и за ними следует шестнадцатеричное представление остальной части значащей части как дроби, а экспонента представляется символами 'p-1022'. Если точность находится в интервале [1, 12], субнормализованное значение нормализуется таким образом, что оно начинается со символов '0x1.', округляется до заданного числа шестнадцатеричных цифр точности, а экспонента соответственно корректируется. Обратите внимание, что в значащей части субнормализованного значения должна быть по крайней мере одна ненулевая цифра.

Если заданы флаги '(' или ',', будет выброшено исключение FormatFlagsConversionMismatchException.

'A' '\u0041' Версия 'a' в верхнем регистре. Вся строка, представляющая число, будет преобразована в верхний регистр, включая 'x' ('\u0078') и 'p' ('\u0070' и все шестнадцатеричные цифры 'a' - 'f' ('\u0061' - '\u0066').

Все флаги, определённые для Byte, Short, Integer и Long, применяются.

Если задан флаг '#', десятичная разделитель всегда будет присутствовать.

Если флаги width не заданы, форматирование по умолчанию следующее:

  • Вывод выравнивается по правому краю в пределах width
  • Отрицательные числа начинаются с '-'
  • Положительные числа и положительный ноль не включают знак или дополнительный ведущий пробел
  • Разделители групп не включены
  • Десятичная разделитель появится только в том случае, если за ним следует цифра

Ширина ширины — это минимальное количество символов, которые должны быть записаны в выходные данные. Это включает в себя любые знаки, цифры, разделители групп, десятичные разделители, экспоненциальный символ, индикатор основания, скобки и строки, представляющие бесконечность и NaN, если применимо. Если длина преобразованного значения меньше ширины, то выходные данные будут дополнены пробелами ('\u0020') до тех пор, пока общее количество символов не станет равным ширине. По умолчанию дополнение выполняется слева. Если указан флаг '-', то дополнение будет справа. Если ширина не указана, то минимального значения нет.

Если преобразование является 'e', 'E' или 'f', то точность — это количество цифр после десятичного разделителя. Если точность не указана, она предполагается равной 6.

Если преобразование является 'g' или 'G', то точность — это общее количество значащих цифр в полученном значении порядка после округления. Если точность не указана, то значение по умолчанию — 6. Если точность равна 0, она считается равной 1.

Если преобразование является 'a' или 'A', то точность — это количество шестнадцатеричных цифр после разделителя. Если точность не указана, то будут выведены все цифры, возвращённые Double.toHexString(double).

BigDecimal

Следующие преобразования могут быть применены BigDecimal.

'e' '\u0065' Требуется, чтобы вывод был отформатирован с использованием научной записи. Применяется алгоритм локализации алгоритм локализации.

Форматирование величины m зависит от ее значения.

Если m равно положительному или отрицательному нулю, то показатель степени будет "+00".

В противном случае результат — строка, представляющая знак и абсолютное значение аргумента. Форматирование знака описано в алгоритме локализации. Форматирование величины m зависит от ее значения.

Пусть n — единственное целое число такое, что 10n <= m < 10n+1; тогда пусть a — математически точное частное от деления m на 10n так, что 1 <= a < 10. Величина затем представляется как целая часть a, как отдельная цифра, за которой следует десятичный разделитель, за которым следуют десятичные цифры, представляющие дробную часть a, за которой следует символ степени 'e' ('\u0065'), за которым следует знак показателя степени, за которым следует представление n в виде целого десятичного числа, как получено методом Long.toString(long, int), и дополненное нулями до как минимум двух цифр.

Количество цифр в результате для дробной части m или a равно точности. Если точность не указана, то значение по умолчанию равно 6. Если точность меньше количества цифр справа от десятичной точки, то значение будет округлено с использованием алгоритма округления до ближайшего целого. В противном случае к значению могут быть добавлены нули для достижения точности. Для канонического представления значения используйте BigDecimal.toString().

Если задан флаг ',', то будет выброшено исключение FormatFlagsConversionMismatchException.

'E' '\u0045' Верхний регистр варианта 'e'. Символ степени будет 'E' ('\u0045').
'g' '\u0067' Требуется, чтобы вывод был отформатирован в общем формате научной записи, как описано ниже. Применяется алгоритм локализации алгоритм локализации.

После округления для точности, форматирование полученной величины m зависит от ее значения.

Если m больше или равно 10-4, но меньше 10точность, то оно представляется в десятичном формате.

Если m меньше 10-4 или больше или равно 10точность, то оно представляется в научной записи.

Общее количество значащих цифр в m равно точности. Если точность не указана, то значение по умолчанию равно 6. Если точность 0, то она принимается равной 1.

Если задан флаг '#', то будет выброшено исключение FormatFlagsConversionMismatchException.

'G' '\u0047' Верхний регистр варианта 'g'.
'f' '\u0066' Требуется, чтобы вывод был отформатирован с использованием десятичного формата. Применяется алгоритм локализации алгоритм локализации.

Результат — строка, представляющая знак и абсолютное значение аргумента. Форматирование знака описано в алгоритме локализации. Форматирование величины m зависит от ее значения.

Величина форматируется как целая часть m без ведущих нулей, за которой следует десятичный разделитель, за которым следуют одна или несколько десятичных цифр, представляющих дробную часть m.

Количество цифр в результате для дробной части m или a равно точности. Если точность не указана, то значение по умолчанию равно 6. Если точность меньше количества цифр справа от десятичной точки, то значение будет округлено с использованием алгоритма округления до ближайшего целого. В противном случае к значению могут быть добавлены нули для достижения точности. Для канонического представления значения используйте BigDecimal.toString().

Все флаги, определенные для Byte, Short, Integer и Long, применяются.

Если задан флаг '#', то десятичный разделитель всегда будет присутствовать.

Поведение по умолчанию при отсутствии флагов такое же, как для Float и Double.

Указание ширины и точности такое же, как определено для Float и Double.

Дата/Время

Это преобразование может быть применено к long, Long, Calendar, Date и TemporalAccessor

't' '\u0074' Префикс для символов преобразования даты и времени.
'T' '\u0054' Версия символов 't' в верхнем регистре.

Следующие суффиксы символов преобразования даты и времени определены для преобразований 't' и 'T'. Типы аналогичны, но не полностью идентичны типам, определённым GNU date и POSIX strftime(3c). Дополнительные типы преобразований предоставлены для доступа к функциям, специфичным для Java (например, 'L' для миллисекунд в секунде).

Следующие символы преобразования используются для форматирования времени:

'H' '\u0048' Час по 24-часовому формату, отформатированный как две цифры с ведущим нулём, если необходимо, например, 00 - 23. 00 соответствует полуночи.
'I' '\u0049' Час по 12-часовому формату, отформатированный как две цифры с ведущим нулём, если необходимо, например, 01 - 12. 01 соответствует часу (утром или днём).
'k' '\u006b' Час по 24-часовому формату, например, 0 - 23. 0 соответствует полуночи.
'l' '\u006c' Час по 12-часовому формату, например, 1 - 12. 1 соответствует часу (утром или днём).
'M' '\u004d' Минута в часе, отформатированная как две цифры с ведущим нулём, если необходимо, например, 00 - 59.
'S' '\u0053' Секунды в минуте, отформатированные как две цифры с ведущим нулём, если необходимо, например, 00 - 60 ("60" — специальное значение, необходимое для поддержки високосных секунд).
'L' '\u004c' Миллисекунда в секунде, отформатированная как три цифры с ведущими нулями, если необходимо, например, 000 - 999.
'N' '\u004e' Наносекунда в секунде, отформатированная как девять цифр с ведущими нулями, если необходимо, например, 000000000 - 999999999. Точность этого значения ограничена разрешением базовой операционной системы или оборудования.
'p' '\u0070' Маркер «утро/день» в нижнем регистре, специфичный для региона, например, "am" или "pm". Использование префикса преобразования 'T' принудительно приводит этот вывод к верхнему регистру. (Обратите внимание, что 'p' генерирует вывод в нижнем регистре. Это отличается от GNU date и POSIX strftime(3c), которые генерируют вывод в верхнем регистре.)
'z' '\u007a' Численное смещение часового пояса относительно Гринвичского времени по стандарту RFC 822, например, -0800. Это значение будет корректироваться по мере необходимости для летнего времени. Для long, Long, и Date используется часовой пояс по умолчанию для этой инстанции виртуальной машины Java.
'Z' '\u005a' Строка, представляющая аббревиатуру часового пояса. Это значение будет корректироваться по мере необходимости для летнего времени. Для long, Long, и Date используется часовой пояс по умолчанию для этой инстанции виртуальной машины Java. Локаль форматировщика переопределяет локаль аргумента (если таковая имеется).
's' '\u0073' Секунды, прошедшие с начала эпохи, начиная с 1 января 1970 00:00:00 UTC, т.е. Long.MIN_VALUE/1000 до Long.MAX_VALUE/1000.
'Q' '\u004f' Миллисекунды, прошедшие с начала эпохи, начиная с 1 января 1970 00:00:00 UTC, т.е. Long.MIN_VALUE до Long.MAX_VALUE. Точность этого значения ограничена разрешением базовой операционной системы или оборудования.

Для форматирования дат используются следующие символы преобразования:

'B' '\u0042' Месяц в полном формате, специфичный для локали, например, "January", "February".
'b' '\u0062' Сокращённое имя месяца, специфичное для локали, например, "Jan", "Feb".
'h' '\u0068' То же, что и 'b'.
'A' '\u0041' Полное имя дня недели, специфичное для локали, например, "Sunday", "Monday"
'a' '\u0061' Сокращённое имя дня недели, специфичное для локали, например, "Sun", "Mon"
'C' '\u0043' Четырехзначный год, разделённый на 100, отформатированный как двузначное число с ведущим нулём при необходимости, например, 00 - 99
'Y' '\u0059' Год, отформатированный как минимум четырьмя знаками с ведущими нулями при необходимости, например, 0092 равно 92 до н. э. для григорианского календаря.
'y' '\u0079' Последние две цифры года, отформатированные с ведущими нулями при необходимости, например, 00 - 99.
'j' '\u006a' День года, отформатированный как трёхзначное число с ведущими нулями при необходимости, например, 001 - 366 для григорианского календаря. 001 соответствует первому дню года.
'm' '\u006d' Месяц, отформатированный как двузначное число с ведущими нулями при необходимости, например, 01 - 13, где "01" — первый месяц года, и ("13" — специальное значение, необходимое для поддержки лунных календарей).
'd' '\u0064' День месяца, отформатированный как двузначное число с ведущими нулями при необходимости, например, 01 - 31, где "01" — первый день месяца.
'e' '\u0065' День месяца, отформатированный как двузначное число, например, 1 - 31, где "1" — первый день месяца.

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

'R' '\u0052' Время, отформатированное для 24-часового формата, как "%tH:%tM"
'T' '\u0054' Время, отформатированное для 24-часового формата, как "%tH:%tM:%tS".
'r' '\u0072' Время, отформатированное для 12-часового формата, как "%tI:%tM:%tS %Tp". Позиция маркера утра или дня ('%Tp') может зависеть от локали.
'D' '\u0044' Дата, отформатированная как "%tm/%td/%ty".
'F' '\u0046' Полная дата в формате ISO 8601, отформатированная как "%tY-%tm-%td".
'c' '\u0063' Дата и время, отформатированные как "%ta %tb %td %tT %tZ %tY", например, "Sun Jul 20 16:17:00 EDT 1969".

Применяется флаг '-' , определённый для общих преобразований. Если задан флаг '#', будет брошено исключение FormatFlagsConversionMismatchException.

Ширина — минимальное количество символов, которое должно быть записано в вывод. Если длина преобразованного значения меньше, чем width, то вывод будет дополнен пробелами ('\u0020') до тех пор, пока общее количество символов не станет равным ширине. По умолчанию дополнение происходит слева. Если задан флаг '-', то дополнение будет справа. Если ширина не указана, то минимальное количество не требуется.

Точность не применяется. Если точность указана, будет выброшено исключение IllegalFormatPrecisionException.

Процент

Преобразование не соответствует ни одному аргументу.

'%' Результатом является буквальный символ '%' ('\u0025')

Ширина — минимальное количество символов, которое должно быть записано в вывод, включая символ '%'. Если длина преобразованного значения меньше, чем width, то вывод будет дополнен пробелами ('\u0020') до тех пор, пока общее количество символов не станет равным ширине. Дополнение производится слева. Если ширина не указана, то выводится только символ '%'.

Флаг '-' для общих преобразований применяется. Если указаны другие флаги, то будет выброшено исключение FormatFlagsConversionMismatchException.

Точность не применяется. Если точность указана, то будет выброшено исключение IllegalFormatPrecisionException.

Разделитель строк

Преобразование не соответствует ни одному аргументу.

'n' специфичный для платформы разделитель строк, возвращаемый функцией System.lineSeparator().

Флаги, ширина и точность не применяются. Если они указаны, будут выброшены исключения IllegalFormatFlagsException, IllegalFormatWidthException и IllegalFormatPrecisionException соответственно.

Индекс аргумента

Спецификаторы формата могут ссылаться на аргументы тремя способами:

  • Явное индексирование используется, когда спецификатор формата содержит индекс аргумента. Индекс аргумента — это десятичное целое число, указывающее позицию аргумента в списке аргументов. Первый аргумент ссылается на "1$", второй на "2$" и т. д. К одному аргументу можно ссылаться несколько раз.

    Например:

    formatter.format("%4$s %3$s %2$s %1$s %4$s %3$s %2$s %1$s",
                     "a", "b", "c", "d")
    // -> "d c b a d c b a"
  • Относительное индексирование используется, когда спецификатор формата содержит флаг '<' ('\u003c'), который вызывает повторное использование аргумента для предыдущего спецификатора формата. Если предыдущего аргумента нет, то выброшено исключение MissingFormatArgumentException.
    formatter.format("%s %s %<s %<s", "a", "b", "c", "d")
    // -> "a b b b"
    // "c" and "d" are ignored because they are not referenced
  • Обычное индексирование используется, когда спецификатор формата не содержит ни индекса аргумента, ни флага '<'. Каждый спецификатор формата, использующий обычное индексирование, получает последовательный неявный индекс в списке аргументов, независимый от индексов, используемых явным или относительным индексированием.
    formatter.format("%s %s %s %s", "a", "b", "c", "d")
    // -> "a b c d"

Возможно использование строки формата, которая использует все формы индексирования, например:

formatter.format("%2$s %s %<s %s", "a", "b", "c", "d")
// -> "b a a b"
// "c" and "d" are ignored because they are not referenced

Максимальное количество аргументов ограничено максимальным размером массива Java, определённым в Спецификации виртуальной машины Java. Если индекс аргумента не соответствует доступному аргументу, то будет выброшено исключение MissingFormatArgumentException.

Если аргументов больше, чем спецификаторов формата, лишние аргументы игнорируются.

Если не указано иное, передача аргумента null любому методу или конструктору в этом классе приведёт к выбросу исключения NullPointerException.

С момента:
1.5

Вложенные классы

Модификатор и тип Класс Описание
static class  Formatter.BigDecimalLayoutForm

Перечисление для форматирования BigDecimal.

Конструкторы

Конструктор Описание
Formatter()

Создаёт новый форматировщик.

Formatter​(File file)

Создаёт новый форматировщик с указанным файлом.

Formatter​(File file, String csn)

Создаёт новый форматировщик с указанным файлом и кодировкой.

Formatter​(File file, String csn, Locale l)

Создаёт новый форматировщик с указанным файлом, кодировкой и локалью.

Formatter​(File file, Charset charset, Locale l)

Создаёт новый форматировщик с указанным файлом, кодировкой и локалью.

Formatter​(OutputStream os)

Создаёт новый форматировщик с указанным потоком вывода.

Formatter​(OutputStream os, String csn)

Создаёт новый форматировщик с указанным потоком вывода и кодировкой.

Formatter​(OutputStream os, String csn, Locale l)

Создаёт новый форматировщик с указанным потоком вывода, кодировкой и локалью.

Formatter​(OutputStream os, Charset charset, Locale l)

Создаёт новый форматировщик с указанным потоком вывода, кодировкой и локалью.

Formatter​(PrintStream ps)

Создаёт новый форматировщик с указанным потоком вывода в формате print stream.

Formatter​(Appendable a)

Создаёт новый форматировщик с указанным местом назначения.

Formatter​(Appendable a, Locale l)

Создаёт новый форматировщик с указанным местом назначения и локалью.

Formatter​(String fileName)

Создаёт новый форматировщик с указанным именем файла.

Formatter​(String fileName, String csn)

Создаёт новый форматировщик с указанным именем файла и кодировкой.

Formatter​(String fileName, String csn, Locale l)

Создаёт новый форматировщик с указанным именем файла, кодировкой и локалью.

Formatter​(String fileName, Charset charset, Locale l)

Создаёт новый форматировщик с указанным именем файла, кодировкой и локалью.

Formatter​(Locale l)

Создаёт новый форматировщик с указанной локалью.

Методы

Модификатор и тип Метод Описание
void close()

Закрывает этот форматировщик.

void flush()

Очищает кэш форматировщика.

Formatter format​(String format, Object... args)

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

Formatter format​(Locale l, String format, Object... args)

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

IOException ioException()

Возвращает исключение, которое в последний раз было выброшено форматировщиком.

Locale locale()

Возвращает установленную при создании форматировщика локаль.

Appendable out()

Возвращает место назначения для вывода.

String toString()

Возвращает результат вызова метода на месте назначения для вывода.

Методы, унаследованные от класса java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

Конструкторы

Форматтер

public Formatter()

Создаёт новый форматтер.

Назначение отформатированного вывода — StringBuilder, который можно получить, вызвав out(), а его текущее содержимое можно преобразовать в строку, вызвав toString(). Используемый язык — по умолчанию для форматирования для данного экземпляра виртуальной машины Java.

Форматтер

public Formatter(Appendable a)

Создаёт новый форматтер с указанным назначением.

Используемый язык — по умолчанию для форматирования для данного экземпляра виртуальной машины Java.

Параметры:
a — Назначение для отформатированного вывода. Если a равно null, будет создан StringBuilder.

Форматтер

public Formatter(Locale l)

Создаёт новый форматтер с указанным языком.

Назначение отформатированного вывода — StringBuilder, который можно получить, вызвав out(), а его текущее содержимое можно преобразовать в строку, вызвав toString().

Параметры:
l — Язык, который необходимо использовать при форматировании. Если l равно null, локализацию не применяется.

Форматтер

public Formatter(Appendable a,
                 Locale l)

Создаёт новый форматтер с указанным назначением и языком.

Параметры:
a — Назначение для отформатированного вывода. Если a равно null, будет создан StringBuilder.
l — Язык, который необходимо использовать при форматировании. Если l равно null, локализацию не применяется.

Форматтер

public Formatter(String fileName)
          throws FileNotFoundException

Создаёт новый форматтер с указанным именем файла.

Используемый набор символов — набор символов по умолчанию для данного экземпляра виртуальной машины Java.

Используемый язык — по умолчанию для форматирования для данного экземпляра виртуальной машины Java.

Параметры:
fileName — Имя файла, используемого в качестве назначения данного форматтера. Если файл существует, он будет обнулен; в противном случае будет создан новый файл. Вывод будет записан в файл и буферизован.
Исключения:
SecurityException — Если присутствует диспетчер безопасности, и checkWrite(fileName) запрещает доступ для записи в файл.
FileNotFoundException — Если заданное имя файла не обозначает существующего, доступного для записи обычного файла и не может быть создан новый обычный файл с таким именем, или если возникла какая-либо другая ошибка при открытии или создании файла

Форматтер

public Formatter(String fileName,
                 String csn)
          throws FileNotFoundException,
                 UnsupportedEncodingException

Создаёт новый форматтер с указанным именем файла и набором символов.

Используемый язык — по умолчанию для форматирования для данного экземпляра виртуальной машины Java.

Параметры:
fileName — Имя файла, используемого в качестве назначения данного форматтера. Если файл существует, он будет обнулен; в противном случае будет создан новый файл. Вывод будет записан в файл и буферизован.
csn — Имя поддерживаемого набора символов
Исключения:
FileNotFoundException — Если заданное имя файла не обозначает существующего, доступного для записи обычного файла и не может быть создан новый обычный файл с таким именем, или если возникла какая-либо другая ошибка при открытии или создании файла
SecurityException — Если присутствует диспетчер безопасности, и checkWrite(fileName) запрещает доступ для записи в файл
UnsupportedEncodingException — Если указанный набор символов не поддерживается

Форматтер

public Formatter(String fileName,
                 String csn,
                 Locale l)
          throws FileNotFoundException,
                 UnsupportedEncodingException

Создаёт новый форматтер с указанным именем файла, набором символов и языком.

Параметры:
fileName - Имя файла, используемого в качестве назначения для этого форматировщика. Если файл существует, он будет обнулен до нулевого размера; в противном случае будет создан новый файл. Вывод будет записан в файл и буферизован.
csn - Имя поддерживаемой кодировки.
l - Локаль, применяемая во время форматирования. Если l равно null, локализация не применяется.
Исключения:
FileNotFoundException - Если указанное имя файла не обозначает существующий, доступный для записи обычный файл, и новый обычный файл с таким именем не может быть создан, или если произошла какая-либо другая ошибка при открытии или создании файла
SecurityException - Если присутствует менеджер безопасности, и checkWrite(fileName) запрещает запись в файл
UnsupportedEncodingException - Если указанная кодировка не поддерживается

Formatter

public Formatter(String fileName,
                 Charset charset,
                 Locale l)
          throws IOException

Создаёт новый форматировщик с указанным именем файла, кодировкой и локалью.

Параметры:
fileName - Имя файла, используемого в качестве назначения для этого форматировщика. Если файл существует, он будет обнулен до нулевого размера; в противном случае будет создан новый файл. Вывод будет записан в файл и буферизован.
charset - Кодировка.
l - Локаль, применяемая во время форматирования. Если l равно null, локализация не применяется.
Исключения:
IOException - если при открытии или создании файла произошла ошибка ввода-вывода
SecurityException - Если присутствует менеджер безопасности, и checkWrite(fileName) запрещает запись в файл
NullPointerException - если fileName или charset равны null.

Formatter

public Formatter(File file)
          throws FileNotFoundException

Создаёт новый форматировщик с указанным файлом.

Используемая кодировка — по умолчанию для данной виртуальной машины Java.

Используемая локаль — локаль по умолчанию для форматирования в данной виртуальной машине Java.

Параметры:
file - Файл, используемый в качестве назначения для этого форматировщика. Если файл существует, он будет обнулен до нулевого размера; в противном случае будет создан новый файл. Вывод будет записан в файл и буферизован.
Исключения:
SecurityException - Если присутствует менеджер безопасности, и checkWrite(file.getPath()) запрещает запись в файл
FileNotFoundException - Если указанный объект файла не обозначает существующий, доступный для записи обычный файл, и новый обычный файл с таким именем не может быть создан, или если произошла какая-либо другая ошибка при открытии или создании файла

Formatter

public Formatter(File file,
                 String csn)
          throws FileNotFoundException,
                 UnsupportedEncodingException

Создаёт новый форматировщик с указанным файлом и кодировкой.

Используемая локаль — локаль по умолчанию для форматирования в данной виртуальной машине Java.

Параметры:
file - Файл, используемый в качестве назначения для этого форматировщика. Если файл существует, он будет обнулен до нулевого размера; в противном случае будет создан новый файл. Вывод будет записан в файл и буферизован.
csn - Имя поддерживаемой кодировки
Исключения:
FileNotFoundException - Если указанный объект файла не обозначает существующий, доступный для записи обычный файл, и новый обычный файл с таким именем не может быть создан, или если произошла какая-либо другая ошибка при открытии или создании файла
SecurityException - Если присутствует менеджер безопасности, и checkWrite(file.getPath()) запрещает запись в файл
UnsupportedEncodingException - Если указанная кодировка не поддерживается

Formatter

public Formatter(File file,
                 String csn,
                 Locale l)
          throws FileNotFoundException,
                 UnsupportedEncodingException

Создаёт новый форматировщик с указанным файлом, кодировкой и локалью.

Параметры:
file - Файл, используемый в качестве места назначения этого форматировщика. Если файл существует, он будет обнулен до нулевого размера; в противном случае будет создан новый файл. Вывод будет записан в файл и буферизован.
csn - Имя поддерживаемой кодировки символов
l - Локаль, применяемая во время форматирования. Если l равно null, то локализация не применяется.
Исключения:
FileNotFoundException - Если указанный объект файла не обозначает существующий, доступный для записи обычный файл, и новый обычный файл с таким именем не может быть создан, или если при открытии или создании файла произошла какая-либо другая ошибка.
SecurityException - Если присутствует менеджер безопасности и checkWrite(file.getPath()) запрещает запись в файл.
UnsupportedEncodingException - Если указанная кодировка символов не поддерживается.

Formatter

public Formatter(File file,
                 Charset charset,
                 Locale l)
          throws IOException

Создаёт новый форматировщик с указанным файлом, кодировкой и локалью.

Параметры:
file - Файл, используемый в качестве места назначения этого форматировщика. Если файл существует, он будет обнулен до нулевого размера; в противном случае будет создан новый файл. Вывод будет записан в файл и буферизован.
charset - Кодировка символов
l - Локаль, применяемая во время форматирования. Если l равно null, то локализация не применяется.
Исключения:
IOException - если при открытии или создании файла произошла ошибка ввода-вывода.
SecurityException - Если присутствует менеджер безопасности и checkWrite(file.getPath()) запрещает запись в файл.
NullPointerException - если file или charset равно null.

Formatter

public Formatter(PrintStream ps)

Создаёт новый форматировщик с указанным потоком вывода.

Используемая локаль — стандартная локаль для форматирования для этого экземпляра виртуальной машины Java.

Символы записываются в указанный объект PrintStream и, следовательно, кодируются с помощью кодировки этого объекта.

Параметры:
ps - Поток вывода, используемый в качестве места назначения этого форматировщика.

Formatter

public Formatter(OutputStream os)

Создаёт новый форматировщик с указанным потоком вывода.

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

Используемая локаль — стандартная локаль для форматирования для этого экземпляра виртуальной машины Java.

Параметры:
os - Поток вывода, используемый в качестве места назначения этого форматировщика. Вывод будет буферизован.

Formatter

public Formatter(OutputStream os,
                 String csn)
          throws UnsupportedEncodingException

Создаёт новый форматировщик с указанным потоком вывода и кодировкой.

Используемая локаль — стандартная локаль для форматирования для этого экземпляра виртуальной машины Java.

Параметры:
os - Поток вывода, используемый в качестве места назначения этого форматировщика. Вывод будет буферизован.
csn - Имя поддерживаемой кодировки символов
Исключения:
UnsupportedEncodingException - Если указанная кодировка символов не поддерживается.

Formatter

public Formatter(OutputStream os,
                 String csn,
                 Locale l)
          throws UnsupportedEncodingException

Создаёт новый форматировщик с указанным потоком вывода, кодировкой и локалью.

Параметры:
os - Поток вывода, используемый в качестве места назначения этого форматировщика. Вывод будет буферизован.
csn - Имя поддерживаемой кодировки символов
l - Локаль, применяемая во время форматирования. Если l равно null, то локализация не применяется.
Исключения:
UnsupportedEncodingException - Если указанная кодировка символов не поддерживается.

Formatter

public Formatter(OutputStream os,
                 Charset charset,
                 Locale l)

Создаёт новый форматировщик с указанным потоком вывода, кодировкой и локалью.

Параметры:
os - Поток вывода, используемый в качестве назначения для этого форматировщика. Вывод будет буферизован.
charset - кодировка
l - Локаль, которая применяется во время форматирования. Если l равно null, то локализация не применяется.
Исключения:
NullPointerException - если os или charset имеют значение null.

Методы

locale

public Locale locale()

Возвращает локаль, установленную при создании этого форматера.

Метод format для этого объекта с аргументом locale не изменяет это значение.

Возвращает:
null если локализация не применена, иначе локаль
Выбрасывает:
FormatterClosedException - Если этот форматер был закрыт вызовом его метода close()

out

public Appendable out()

Возвращает место назначения для вывода.

Возвращает:
Место назначения для вывода
Выбрасывает:
FormatterClosedException - Если этот форматер был закрыт вызовом его метода close()

toString

public String toString()

Возвращает результат вызова toString() для места назначения вывода. Например, следующий код форматирует текст в StringBuilder, а затем извлекает результирующую строку:

Formatter f = new Formatter();
f.format("Last reboot at %tc", lastRebootDate);
String s = f.toString();
// -> s == "Last reboot at Sat Jan 01 00:00:00 PST 2000"

Вызов этого метода ведет себя точно так же, как вызов

out().toString()

В зависимости от спецификации toString для Appendable, возвращаемая строка может или не может содержать символы, записанные в место назначения. Например, буферы обычно возвращают свое содержимое в toString(), но потоки не могут, так как данные отбрасываются.

Переопределяет:
toString в классе Object
Возвращает:
Результат вызова toString() для места назначения вывода
Выбрасывает:
FormatterClosedException - Если этот форматер был закрыт вызовом его метода close()

flush

public void flush()

Очищает этот форматер. Если место назначения реализует интерфейс Flushable, вызывается его метод flush.

Очистка форматера записывает любой буферизованный вывод в место назначения в базовый поток.

Определено в:
flush в интерфейсе Flushable
Выбрасывает:
FormatterClosedException - Если этот форматер был закрыт вызовом его метода close()

close

public void close()

Закрывает этот форматер. Если место назначения реализует интерфейс Closeable, вызывается его метод close.

Закрытие форматера позволяет ему освободить ресурсы, которые он может удерживать (например, открытые файлы). Если форматер уже закрыт, то вызов этого метода не оказывает никакого влияния.

Попытка вызвать какие-либо методы, кроме ioException() в этом форматере после его закрытия приведет к исключению FormatterClosedException.

Определено в:
close в интерфейсе AutoCloseable
Определено в:
close в интерфейсе Closeable

ioException

public IOException ioException()

Возвращает IOException последнее брошенное этим форматером Appendable.

Если метод append() места назначения никогда не выбрасывает IOException, то этот метод всегда вернет null.

Возвращает:
Последнее исключение, брошенное Appendable, или null если такого исключения не существует.

format

public Formatter format(String format,
                        Object... args)

Записывает отформатированную строку в место назначения этого объекта, используя указанную строку формата и аргументы. Используемая локаль — определенная при создании этого форматера.

Параметры:
format - Строка формата, как описано в Синтаксис строки формата.
args - Аргументы, на которые ссылаются спецификаторы формата в строке формата. Если аргументов больше, чем спецификаторов формата, дополнительные аргументы игнорируются. Максимальное количество аргументов ограничено максимальным размером массива Java, определенным в Спецификации виртуальной машины Java.
Возвращает:
Этот форматер
Выбрасывает:
IllegalFormatException - Если строка формата содержит неверный синтаксис, спецификатор формата несовместим с заданными аргументами, недостаточно аргументов для строки формата или другие недопустимые условия. Спецификация всех возможных ошибок форматирования приведена в разделе «Подробности» спецификации класса форматера.
FormatterClosedException - Если этот форматер был закрыт вызовом его метода close()

format

public Formatter format(Locale l,
                        String format,
                        Object... args)

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

Параметры:
l - Применяемый языковой стандарт при форматировании. Если l равен null, локализация не применяется. Это не изменяет языковой стандарт этого объекта, установленный при создании.
format - Строка формата, как описано в синтаксисе строк формата
args - Аргументы, на которые ссылаются спецификаторы формата в строке формата. Если аргументов больше, чем спецификаторов формата, дополнительные аргументы игнорируются. Максимальное количество аргументов ограничено максимальным размером массива Java, как определено в Спецификации виртуальной машины Java.
Возвращает:
Этот форматировщик
Исключение:
IllegalFormatException - Если строка формата содержит неправильный синтаксис, спецификатор формата несовместим с заданными аргументами, недостаточно аргументов для строки формата или другие неверные условия. Для спецификации всех возможных ошибок форматирования см. раздел Детали спецификации класса форматировщика.
FormatterClosedException - Если этот форматировщик был закрыт вызовом его метода close()

© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Formatter.html

Spec-Zone .ru
спецификации, руководства, описания, API