Класс Formatter
- Все реализованные интерфейсы:
Closeable, Flushable, AutoCloseable
public final class Formatter extends Object implements Closeable, Flushable
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"
Как и в sprintf(3) языка 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
Необязательный элемент argument_index — это десятичное целое число, указывающее позицию аргумента в списке аргументов. На первый аргумент ссылаются с помощью "
1$", на второй — с помощью "2$" и т. д.Необязательный элемент flags — это набор символов, изменяющих формат вывода. Набор допустимых флагов зависит от преобразования.
Необязательный элемент width — это положительное десятичное целое число, указывающее минимальное количество символов, выводимых в результат.
Необязательный элемент precision — это неотрицательное десятичное целое число, обычно используемое для ограничения количества символов. Конкретное поведение зависит от преобразования.
Обязательный элемент conversion — это символ, указывающий, как следует форматировать аргумент. Набор допустимых преобразований для заданного аргумента зависит от типа данных аргумента.
- Спецификаторы формата для типов, представляющих дату и время, имеют следующий синтаксис:
%[argument_index$][flags][width]conversion
Необязательные элементы argument_index, flags и width определены выше.
Обязательный элемент conversion — это последовательность из двух символов. Первый символ —
't'или'T'. Второй символ указывает используемый формат. Эти символы похожи, но не полностью идентичны символам, определённым в GNUdateи POSIXstrftime(3c). - Спецификаторы формата, не соответствующие аргументам, имеют следующий синтаксис:
%[flags][width]conversion
Необязательные элементы flags и width определены выше.
Обязательный элемент conversion — это символ, указывающий содержимое, которое следует вставить в результат.
Преобразования
Преобразования разделены на следующие категории:
- Общие — могут применяться к аргументам любого типа
- Символьные — могут применяться к базовым типам, представляющим символы Unicode:
char,Character,byte,Byte,shortиShort. Это преобразование также может применяться к типамintиInteger, еслиCharacter.isValidCodePoint(int)возвращаетtrue - Числовые
- Целочисленные — могут применяться к целочисленным типам Java:
byte,Byte,short,Short,intиInteger,long,LongиBigInteger(но не кcharилиCharacter) -
С плавающей точкой — могут применяться к типам Java с плавающей точкой:
float,Float,double,DoubleиBigDecimal
- Целочисленные — могут применяться к целочисленным типам Java:
- Дата/время — могут применяться к типам Java, способным кодировать дату или время:
long,Long,Calendar,DateиTemporalAccessor - Процент — выводит символ процента
'%'('\u0025') - Разделитель строк — выводит разделитель строк, используемый на платформе
Для преобразований категорий Общие, Символьные, Числовые, Целочисленные и Дата/время, если не указано иное, при условии, что аргумент 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' |
символьная | Результатом является символ Unicode |
'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. Локаль форматтера имеет приоритет над локалью аргумента (если она есть). |
'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" |
'C' |
Четырёхзначный год, делённый на 100, выводится двумя цифрами с ведущим нулём при необходимости, например 00 - 99 |
'Y' |
Год, выводится минимум четырьмя цифрами с ведущими нулями при необходимости, например 0092 соответствует 92 году н. э. в григорианском календаре. |
'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 означает, что флаг поддерживается для указанных типов аргументов.
| Флаг | Общие | Символьные | Целочисленные | С плавающей точкой | Дата/время | Описание |
|---|---|---|---|---|---|---|
| '-' | y | y | y | y | y | Результат будет выровнен по левому краю. |
| '#' | y1 | - | y3 | y | - | Результат будет представлен в альтернативной форме, зависящей от преобразования |
| '+' | - | - | y4 | y | - | Результат всегда будет содержать знак |
| ' ' | - | - | y4 | y | - | Перед положительными значениями в результате будет добавлен пробел |
| '0' | - | - | y | y | - | Результат будет дополнен нулями |
| ',' | - | - | y2 | y5 | - | Результат будет содержать разделители групп разрядов, зависящие от локали |
| '(' | - | - | y4 | y5 | - | Отрицательные числа в результате будут заключены в круглые скобки |
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. Аналогично, нулевое значение индекса аргумента приведёт к выбрасыванию исключения IllegalFormatException.
Если спецификатор формата содержит символ преобразования, неприменимый к соответствующему аргументу, будет выброшено исключение IllegalFormatConversionException.
Значения precision должны находиться в диапазоне от нуля до Integer.MAX_VALUE включительно; в противном случае выбрасывается исключение IllegalFormatPrecisionException.
Значения width должны находиться в диапазоне от единицы до Integer.MAX_VALUE включительно, иначе будет выброшено исключение IllegalFormatWidthException. Обратите внимание: ширина может выглядеть отрицательной, но знак минус является флагом. Например, в строке формата "%-20s" ширина равна 20, а флаг — "-".
Значения index должны находиться в диапазоне от единицы до Integer.MAX_VALUE включительно, иначе будет выброшено исключение IllegalFormatException.
Любое из указанных исключений может быть выброшено любым из методов format класса Formatter, а также любым из удобных методов format, например String.format и PrintStream.printf.
Для преобразований категорий Общие, Символьные, Числовые, Целочисленные и Дата/время, если не указано иное, когда аргумент arg равен null, результатом будет "null".
Преобразования, обозначенные символом верхнего регистра (то есть 'B', 'H', 'S', 'C', 'X', 'E', 'G', 'A' и 'T'), аналогичны преобразованиям с соответствующими символами нижнего регистра, за исключением того, что результат переводится в верхний регистр согласно правилам текущей Locale. Если явная локаль не указана ни при создании экземпляра, ни в качестве параметра при вызове его метода, используется default locale.
Общие
Следующие общие преобразования могут применяться к аргументам любого типа:
| Преобразование | Unicode | Описание |
|---|---|---|
'b' |
'\u0062' |
Возвращает либо "true", либо "false", как возвращает Boolean.toString(boolean). Если аргумент равен Если указан флаг |
'B' |
'\u0042' |
Вариант 'b' в верхнем регистре. |
'h' |
'\u0068' |
Возвращает строку, представляющую значение хеш-кода объекта. Результат получается вызовом метода Если указан флаг |
'H' |
'\u0048' |
Вариант 'h' в верхнем регистре. |
's' |
'\u0073' |
Возвращает строку. Если аргумент реализует Если указан флаг |
'S' |
'\u0053' |
Вариант 's' в верхнем регистре. |
К общим преобразованиям применяются следующие флаги:
| Флаг | Unicode | Описание |
|---|---|---|
'-' |
'\u002d' |
Выравнивает результат по левому краю. В конце преобразованного значения при необходимости добавляются пробелы ('\u0020'), чтобы заполнить минимальную ширину поля. Если ширина не указана, будет выброшено исключение MissingFormatWidthException. Если этот флаг не указан, результат выравнивается по правому краю. |
'#' |
'\u0023' |
Требует использовать для результата альтернативную форму. Определение этой формы зависит от преобразования. |
Ширина — это минимальное количество символов, которое будет записано в выходной поток. Если длина преобразованного значения меньше ширины, результат будет дополнен символами ' ' ('\u0020'), пока общее количество символов не достигнет ширины. По умолчанию заполнение выполняется слева. Если указан флаг '-', заполнение выполняется справа. Если ширина не задана, минимальное значение отсутствует.
Точность — это максимальное количество символов, которое будет записано в выходной поток. Точность применяется до ширины, поэтому результат будет усечен до precision символов, даже если ширина больше точности. Если точность не задана, явного ограничения на количество символов нет.
Символьные
Это преобразование может применяться кchar и Character. Оно также может применяться к типам byte, Byte, short и Short, int и Integer, если Character.isValidCodePoint(int) возвращает true. Если метод возвращает false, будет выброшено исключение IllegalFormatCodePointException. | Преобразование | Unicode | Описание |
|---|---|---|
'c' |
'\u0063' |
Форматирует аргумент как символ Unicode, как описано в разделе Представление символов Unicode. Если аргумент представляет дополнительный символ, это может быть более одного 16-битного значения char. Если указан флаг |
'C' |
'\u0043' |
Вариант 'c' в верхнем регистре. |
Применяется флаг '-', определенный для общих преобразований. Если указан флаг '#', будет выброшено исключение FormatFlagsConversionMismatchException.
Ширина определяется так же, как для общих преобразований.
Точность неприменима. Если точность указана, будет выброшено исключение IllegalFormatPrecisionException.
Числовые
Числовые преобразования делятся на следующие категории:
Числовые типы форматируются согласно следующему алгоритму:
После получения цифр целой части, дробной части и экспоненты (в зависимости от типа данных) выполняются следующие преобразования:
- Каждый символ цифры d в строке заменяется цифрой, соответствующей текущей локали и вычисляемой относительно ее нулевой цифры z; то есть d -
'0'+ z. - Если присутствует десятичный разделитель, он заменяется на соответствующий локали десятичный разделитель.
- Если указан флаг
','('\u002c'), разделитель групп разрядов, соответствующий локали, вставляется при просмотре целой части строки от младших разрядов к старшим с интервалами, заданными размером группы разрядов для этой локали. - Если указан флаг
'0', после знака (если он есть) и перед первой ненулевой цифрой вставляются соответствующие локали нули, пока длина строки не достигнет запрошенной ширины поля. - Если значение отрицательное и указан флаг
'(', перед ним добавляются'('('\u0028'), а после него —')'('\u0029'). - Если значение отрицательное (или является отрицательным нулем с плавающей точкой) и флаг
'('не указан, перед ним добавляется'-'('\u002d'). - Если указано
'+'и значение положительное или равно нулю (или является положительным нулем с плавающей точкой), перед ним добавляется'+'('\u002b').
Если значение равно NaN или положительной бесконечности, будут выведены строковые литералы "NaN" или "Infinity" соответственно. Если значение равно отрицательной бесконечности, результатом будет "(Infinity)" при указанном флаге '(', иначе результатом будет "-Infinity". Эти значения не локализуются.
Следующие преобразования могут применяться к byte, Byte, short, Short, int и Integer, long и Long.
| Преобразование | Unicode | Описание |
|---|---|---|
'd' |
'\u0064' |
Форматирует аргумент как десятичное целое число. Применяется алгоритм локализации. Если указан флаг Если указан флаг |
'o' |
'\u006f' |
Форматирует аргумент как целое число в восьмеричной системе счисления. Локализация не выполняется. Если x отрицательно, результатом будет беззнаковое значение, полученное прибавлением 2n к значению, где Если указан флаг Если указан флаг Если указаны флаги |
'x' |
'\u0078' |
Форматирует аргумент как целое число в шестнадцатеричной системе счисления. Локализация не выполняется. Если x отрицательно, результатом будет беззнаковое значение, полученное прибавлением 2n к значению, где Если указан флаг Если указан флаг Если указаны флаги |
'X' |
'\u0058' |
Вариант 'x' в верхнем регистре. Вся строка, представляющая число, переводится в верхний регистр, включая 'x' (если есть) и все шестнадцатеричные цифры 'a' – 'f' ('\u0061' – '\u0066'). |
Если преобразование — 'o', 'x' или 'X' и указаны оба флага — '#' и '0', результат будет содержать индикатор системы счисления ('0' для восьмеричной системы и "0x" или "0X" для шестнадцатеричной), некоторое количество нулей (в зависимости от ширины) и значение.
Если флаг '-' не указан, заполнение пробелами выполняется перед знаком.
К целочисленным числовым преобразованиям применяются следующие флаги:
| Преобразование | Unicode | Описание |
|---|---|---|
'+' |
'\u002b' |
Требует указывать положительный знак для всех положительных чисел. Если этот флаг не указан, знак будет указан только для отрицательных значений. Если указаны оба флага — |
' ' |
'\u0020' |
Требует добавлять один дополнительный пробел ('\u0020') для неотрицательных значений. Если указаны оба флага — |
'0' |
'\u0030' |
Требует заполнять поле ведущими нулями до минимальной ширины после знака или индикатора системы счисления, кроме случаев преобразования NaN или бесконечности. Если ширина не указана, будет выброшено исключение MissingFormatWidthException. Если указаны оба флага — |
',' |
'\u002c' |
Требует добавлять в результат разделители групп разрядов, соответствующие локали, как описано в разделе «Разделитель групп разрядов» алгоритма локализации. |
'(' |
'\u0028' |
Требует добавлять '(' ('\u0028') перед отрицательными значениями и ')' ('\u0029') после них. |
Если флаги не указаны, по умолчанию используется следующее форматирование:
- Результат выравнивается по правому краю в пределах
width - Отрицательные числа начинаются с
'-'('\u002d') - Для положительных чисел и нуля не указывается знак и не добавляется дополнительный начальный пробел
- Разделители групп разрядов не используются
Ширина — это минимальное количество символов, которое будет записано в выходной поток. Она включает знаки, цифры, разделители групп разрядов, индикатор системы счисления и скобки. Если длина преобразованного значения меньше ширины, результат будет дополнен пробелами ('\u0020'), пока общее количество символов не достигнет ширины. По умолчанию заполнение выполняется слева. Если указан флаг '-', заполнение выполняется справа. Если ширина не задана, минимальное значение отсутствует.
Точность неприменима. Если точность указана, будет выброшено исключение IllegalFormatPrecisionException.
Следующие преобразования могут применяться к BigInteger.
| Преобразование | Unicode | Описание |
|---|---|---|
'd' |
'\u0064' |
Требует форматировать результат как десятичное целое число. Применяется алгоритм локализации. Если указан флаг |
'o' |
'\u006f' |
Требует форматировать результат как целое число в восьмеричной системе счисления. Локализация не выполняется. Если x отрицательно, результатом будет знаковое значение, начинающееся с Если x положительно или равно нулю и указан флаг Если указан флаг Если указан флаг Если указан флаг |
'x' |
'\u0078' |
Требует форматировать результат как целое число в шестнадцатеричной системе счисления. Локализация не выполняется. Если x отрицательно, результатом будет знаковое значение, начинающееся с Если x положительно или равно нулю и указан флаг Если указан флаг Если указан флаг Если указан флаг |
'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, Float, double и Double.
| Преобразование | Юникод | Описание |
|---|---|---|
'e' |
'\u0065' |
Требует форматирования вывода с использованием компьютерной научной записи. Применяется алгоритм локализации. Аргумент Форматирование порядка величины m зависит от её значения. Если m равна NaN или бесконечности, будут выведены строковые литералы "NaN" или "Infinity" соответственно. Эти значения не локализуются. Если m равна положительному или отрицательному нулю, показатель степени будет В противном случае результат представляет собой строку, содержащую знак и порядок величины (абсолютное значение) аргумента. Форматирование знака описано в алгоритме локализации. Форматирование порядка величины m зависит от её значения. Пусть n — единственное целое число, для которого 10n <= m < 10n+1; тогда пусть a — математически точное частное от деления m на 10n, такое что 1 <= a < 10. Порядок величины представляется целой частью a в виде одной десятичной цифры, за которой следуют десятичный разделитель и десятичные цифры, обозначающие дробную часть a, символ экспоненты Количество цифр в дробной части m или a в результате равно точности. Если точность не указана, используется значение по умолчанию Если указан флаг |
'E' |
'\u0045' |
Вариант 'e' в верхнем регистре. Символ экспоненты будет 'E' ('\u0045'). |
'g' |
'\u0067' |
Требует форматирования вывода в общей научной записи, описанной ниже. Применяется алгоритм локализации. После округления с учётом точности форматирование полученного порядка величины m зависит от его значения. Если m больше или равно 10-4, но меньше 10precision, оно представляется в десятичном формате. Если m меньше 10-4 или больше либо равно 10precision, оно представляется в компьютерной научной записи. Общее количество значащих цифр в m равно точности. Если точность не указана, используется значение по умолчанию Если указан флаг |
'G' |
'\u0047' |
Вариант 'g' в верхнем регистре. |
'f' |
'\u0066' |
Требует форматирования вывода в десятичном формате. Применяется алгоритм локализации. Аргумент Результат представляет собой строку, содержащую знак и порядок величины (абсолютное значение) аргумента. Форматирование знака описано в алгоритме локализации. Форматирование порядка величины m зависит от её значения. Если m равна NaN или бесконечности, будут выведены строковые литералы "NaN" или "Infinity" соответственно. Эти значения не локализуются. Порядок величины форматируется как целая часть m без ведущих нулей, за которой следуют десятичный разделитель и одна или несколько десятичных цифр, обозначающих дробную часть m. Количество цифр в дробной части m или a в результате равно точности. Если точность не указана, используется значение по умолчанию |
'a' |
'\u0061' |
Требует форматирования вывода в шестнадцатеричном экспоненциальном формате. Локализация не применяется. Результат представляет собой строку, содержащую знак и порядок величины (абсолютное значение) аргумента x. Если x отрицательно или является отрицательным нулём, результат будет начинаться с Если x положительно или является положительным нулём и указан флаг Форматирование порядка величины m зависит от его значения.
Если указаны флаги |
'A' |
'\u0041' |
Вариант 'a' в верхнем регистре. Вся строка, представляющая число, будет преобразована в верхний регистр, включая 'x' ('\u0078') и 'p' ('\u0070', а также все шестнадцатеричные цифры от 'a' до 'f' (от '\u0061' до '\u0066'). |
Применяются все флаги, определённые для Byte, Short, Integer и Long.
Если указан флаг '#', десятичный разделитель всегда будет присутствовать.
Если флаги не указаны, по умолчанию применяется следующее форматирование:
- Вывод выравнивается по правому краю в пределах
width - Отрицательные числа начинаются с
'-' - Для положительных чисел и положительного нуля не указывается знак и не добавляются пробелы в начале
- Разделители групп разрядов не используются
- Десятичный разделитель отображается, только если за ним следует цифра
Ширина — это минимальное количество символов, выводимых в результате. Сюда входят знаки, цифры, разделители групп разрядов, десятичные разделители, символ экспоненты, индикатор основания системы счисления, скобки, а также строки, представляющие бесконечность и NaN, если применимо. Если длина преобразованного значения меньше ширины, вывод дополняется пробелами ('\u0020'), пока общее количество символов не достигнет ширины. По умолчанию пробелы добавляются слева. Если указан флаг '-', пробелы добавляются справа. Если ширина не указана, минимальное значение не задаётся.
Если преобразование — 'e', 'E' или 'f', точность задаёт количество цифр после десятичного разделителя. Если точность не указана, предполагается значение 6.
Если преобразование — 'g' или 'G', точность задаёт общее количество значащих цифр в полученном порядке величины после округления. Если точность не указана, используется значение по умолчанию 6. Если точность равна 0, она считается равной 1.
Если преобразование — 'a' или 'A', точность задаёт количество шестнадцатеричных цифр после точки основания. Если точность не указана, будут выведены все цифры, возвращаемые методом Double.toHexString(double).
Следующие преобразования могут применяться к BigDecimal.
| Преобразование | Юникод | Описание |
|---|---|---|
'e' |
'\u0065' |
Требует форматирования вывода с использованием компьютерной научной записи. Применяется алгоритм локализации. Форматирование порядка величины m зависит от её значения. Если m равна положительному или отрицательному нулю, показатель степени будет В противном случае результат представляет собой строку, содержащую знак и порядок величины (абсолютное значение) аргумента. Форматирование знака описано в алгоритме локализации. Форматирование порядка величины m зависит от её значения. Пусть n — единственное целое число, для которого 10n <= m < 10n+1; тогда пусть a — математически точное частное от деления m на 10n, такое что 1 <= a < 10. Порядок величины представляется целой частью a в виде одной десятичной цифры, за которой следуют десятичный разделитель и десятичные цифры, обозначающие дробную часть a, символ экспоненты Количество цифр в дробной части m или a в результате равно точности. Если точность не указана, используется значение по умолчанию Если указан флаг |
'E' |
'\u0045' |
Вариант 'e' в верхнем регистре. Символ экспоненты будет 'E' ('\u0045'). |
'g' |
'\u0067' |
Требует форматирования вывода в общей научной записи, описанной ниже. Применяется алгоритм локализации. После округления с учётом точности форматирование полученного порядка величины m зависит от его значения. Если m больше или равно 10-4, но меньше 10precision, оно представляется в десятичном формате. Если m меньше 10-4 или больше либо равно 10precision, оно представляется в компьютерной научной записи. Общее количество значащих цифр в m равно точности. Если точность не указана, используется значение по умолчанию Если указан флаг |
'G' |
'\u0047' |
Вариант 'g' в верхнем регистре. |
'f' |
'\u0066' |
Требует форматирования вывода в десятичном формате. Применяется алгоритм локализации. Результат представляет собой строку, содержащую знак и порядок величины (абсолютное значение) аргумента. Форматирование знака описано в алгоритме локализации. Форматирование порядка величины m зависит от её значения. Порядок величины форматируется как целая часть m без ведущих нулей, за которой следуют десятичный разделитель и одна или несколько десятичных цифр, обозначающих дробную часть m. Количество цифр в дробной части m или a в результате равно точности. Если точность не указана, используется значение по умолчанию |
Применяются все флаги, определённые для 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' |
Числовое смещение часового пояса от GMT в формате 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') Ширина — это минимальное число символов, которое будет записано в выходные данные, включая Применяется флаг Точность не применяется. Если точность указана, будет выброшено исключение |
Разделитель строк
Преобразование не соответствует ни одному аргументу.
| Преобразование | Описание |
|---|---|
'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 enum |
Formatter.BigDecimalLayoutForm |
Перечисление для форматирования BigDecimal. |
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
Formatter() |
Создаёт новый форматировщик. |
Formatter |
Создаёт новый форматировщик с указанным файлом. |
Formatter |
Создаёт новый форматировщик с указанным файлом и кодировкой. |
Formatter |
Создаёт новый форматировщик с указанными файлом, кодировкой и локалью. |
Formatter |
Создаёт новый форматировщик с указанными файлом, кодировкой и локалью. |
Formatter |
Создаёт новый форматировщик с указанным выходным потоком. |
Formatter |
Создаёт новый форматировщик с указанными выходным потоком и кодировкой. |
Formatter |
Создаёт новый форматировщик с указанными выходным потоком, кодировкой и локалью. |
Formatter |
Создаёт новый форматировщик с указанными выходным потоком, кодировкой и локалью. |
Formatter |
Создаёт новый форматировщик с указанным потоком печати. |
Formatter |
Создаёт новый форматировщик с указанным местом назначения. |
Formatter |
Создаёт новый форматировщик с указанными местом назначения и локалью. |
Formatter |
Создаёт новый форматировщик с указанным именем файла. |
Formatter |
Создаёт новый форматировщик с указанными именем файла и кодировкой. |
Formatter |
Создаёт новый форматировщик с указанными именем файла, кодировкой и локалью. |
Formatter |
Создаёт новый форматировщик с указанными именем файла, кодировкой и локалью. |
Formatter |
Создаёт новый форматировщик с указанной локалью. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
close() |
Закрывает этот форматировщик. |
void |
flush() |
Сбрасывает буфер этого форматировщика. |
Formatter |
format |
Записывает форматированную строку в место назначения этого объекта, используя указанную строку формата и аргументы. |
Formatter |
format |
Записывает форматированную строку в место назначения этого объекта, используя указанную локаль, строку формата и аргументы. |
IOException |
ioException() |
Возвращает последнее исключение IOException, выброшенное методом Appendable этого форматировщика. |
Locale |
locale() |
Возвращает локаль, заданную при создании этого форматировщика. |
Appendable |
out() |
Возвращает место назначения вывода. |
String |
toString() |
Возвращает результат вызова toString() для места назначения вывода. |
Подробное описание конструкторов
Formatter
public Formatter()
Назначением отформатированного вывода является StringBuilder, который можно получить, вызвав out(), а его текущее содержимое можно преобразовать в строку, вызвав toString(). Для этого экземпляра виртуальной машины Java используется локаль по умолчанию для форматирования.
Formatter
public Formatter(Appendable a)
Для этого экземпляра виртуальной машины Java используется локаль по умолчанию для форматирования.
- Параметры:
-
a— Назначение отформатированного вывода. Еслиaравноnull, будет созданStringBuilder.
Formatter
public Formatter(Locale l)
Назначением отформатированного вывода является StringBuilder, который можно получить, вызвав out(), а его текущее содержимое можно преобразовать в строку, вызвав toString().
- Параметры:
-
l— локаль, используемая при форматировании. Еслиlравноnull, локализация не применяется.
Formatter
public Formatter(Appendable a, Locale l)
- Параметры:
-
a— Назначение отформатированного вывода. Еслиaравноnull, будет созданStringBuilder. -
l— локаль, используемая при форматировании. Еслиlравноnull, локализация не применяется.
Formatter
public Formatter(String fileName) throws FileNotFoundException
Используется кодировка по умолчанию для этого экземпляра виртуальной машины Java.
Для этого экземпляра виртуальной машины Java используется локаль по умолчанию для форматирования.
- Параметры:
-
fileName— Имя файла, используемого в качестве назначения этого форматтера. Если файл существует, его размер будет сокращен до нуля; в противном случае будет создан новый файл. Вывод будет записываться в файл с буферизацией. - Исключения:
-
FileNotFoundException— Если указанное имя файла не обозначает существующий доступный для записи обычный файл и невозможно создать новый обычный файл с таким именем либо при открытии или создании файла возникает другая ошибка
Formatter
public Formatter(String fileName, String csn) throws FileNotFoundException, UnsupportedEncodingException
Для этого экземпляра виртуальной машины Java используется локаль по умолчанию для форматирования.
- Параметры:
-
fileName— Имя файла, используемого в качестве назначения этого форматтера. Если файл существует, его размер будет сокращен до нуля; в противном случае будет создан новый файл. Вывод будет записываться в файл с буферизацией. -
csn— Имя поддерживаемой кодировки - Исключения:
-
FileNotFoundException— Если указанное имя файла не обозначает существующий доступный для записи обычный файл и невозможно создать новый обычный файл с таким именем либо при открытии или создании файла возникает другая ошибка -
UnsupportedEncodingException— Если указанная кодировка не поддерживается
Formatter
public Formatter(String fileName, String csn, Locale l) throws FileNotFoundException, UnsupportedEncodingException
- Параметры:
-
fileName— Имя файла, используемого в качестве назначения этого форматтера. Если файл существует, его размер будет сокращен до нуля; в противном случае будет создан новый файл. Вывод будет записываться в файл с буферизацией. -
csn— Имя поддерживаемой кодировки -
l— локаль, используемая при форматировании. Еслиlравноnull, локализация не применяется. - Исключения:
-
FileNotFoundException— Если указанное имя файла не обозначает существующий доступный для записи обычный файл и невозможно создать новый обычный файл с таким именем либо при открытии или создании файла возникает другая ошибка -
UnsupportedEncodingException— Если указанная кодировка не поддерживается
Formatter
public Formatter(String fileName, Charset charset, Locale l) throws IOException
- Параметры:
-
fileName— Имя файла, используемого в качестве назначения этого форматтера. Если файл существует, его размер будет сокращен до нуля; в противном случае будет создан новый файл. Вывод будет записываться в файл с буферизацией. -
charset— Кодировка -
l— локаль, используемая при форматировании. Еслиlравноnull, локализация не применяется. - Исключения:
-
IOException— если при открытии или создании файла возникает ошибка ввода-вывода -
NullPointerException— еслиfileNameилиcharsetравноnull. - Начиная с:
- 10
Formatter
public Formatter(File file) throws FileNotFoundException
Используется кодировка по умолчанию для этого экземпляра виртуальной машины Java.
Для этого экземпляра виртуальной машины Java используется локаль по умолчанию для форматирования.
- Параметры:
-
file— Файл, используемый в качестве назначения этого форматтера. Если файл существует, его размер будет сокращен до нуля; в противном случае будет создан новый файл. Вывод будет записываться в файл с буферизацией. - Исключения:
-
FileNotFoundException— Если указанный объект файла не обозначает существующий доступный для записи обычный файл и невозможно создать новый обычный файл с таким именем либо при открытии или создании файла возникает другая ошибка
Formatter
public Formatter(File file, String csn) throws FileNotFoundException, UnsupportedEncodingException
Для этого экземпляра виртуальной машины Java используется локаль по умолчанию для форматирования.
- Параметры:
-
file— Файл, используемый в качестве назначения этого форматтера. Если файл существует, его размер будет сокращен до нуля; в противном случае будет создан новый файл. Вывод будет записываться в файл с буферизацией. -
csn— Имя поддерживаемой кодировки - Исключения:
-
FileNotFoundException— Если указанный объект файла не обозначает существующий доступный для записи обычный файл и невозможно создать новый обычный файл с таким именем либо при открытии или создании файла возникает другая ошибка -
UnsupportedEncodingException— Если указанная кодировка не поддерживается
Formatter
public Formatter(File file, String csn, Locale l) throws FileNotFoundException, UnsupportedEncodingException
- Параметры:
-
file— Файл, используемый в качестве назначения этого форматтера. Если файл существует, его размер будет сокращен до нуля; в противном случае будет создан новый файл. Вывод будет записываться в файл с буферизацией. -
csn— Имя поддерживаемой кодировки -
l— локаль, используемая при форматировании. Еслиlравноnull, локализация не применяется. - Исключения:
-
FileNotFoundException— Если указанный объект файла не обозначает существующий доступный для записи обычный файл и невозможно создать новый обычный файл с таким именем либо при открытии или создании файла возникает другая ошибка -
UnsupportedEncodingException— Если указанная кодировка не поддерживается
Formatter
public Formatter(File file, Charset charset, Locale l) throws IOException
- Параметры:
-
file— Файл, используемый в качестве назначения этого форматтера. Если файл существует, его размер будет сокращен до нуля; в противном случае будет создан новый файл. Вывод будет записываться в файл с буферизацией. -
charset— Кодировка -
l— локаль, используемая при форматировании. Еслиlравноnull, локализация не применяется. - Исключения:
-
IOException— если при открытии или создании файла возникает ошибка ввода-вывода -
NullPointerException— еслиfileилиcharsetравноnull. - Начиная с:
- 10
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. - Начиная с:
- 10
Подробное описание методов
locale
public Locale locale()
Метод format этого объекта, принимающий аргумент-локаль, не изменяет это значение.
- Возвращает:
-
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, 2025, 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/25/docs/api/java.base/java/util/Formatter.html