Они форматируют String
.Специфичный для Java синтаксис представлен в java.util.Formatter
.
Общий синтаксис следующий:
%[argument_index$][flags][width][.precision]conversion
%02d
выполняет преобразование десятичного целого числа d
,отформатированный с нулевым заполнением (0
флаг), с шириной 2
.Таким образом, аргумент int
со значением, скажем 7
, будет отформатирован в "07"
как String
.
. Вы также можете увидеть эту строку форматирования, например, String.format
.
Часто используемые форматы
Это лишь некоторые широко используемые форматы, которые не охватывают синтаксис полностью.
Нулевое заполнение для чисел
System.out.printf("Agent %03d to the rescue!", 7);
// Agent 007 to the rescue!
Ширина для выравнивания
Вы можете использовать флаг -
для выравнивания по левому краю;в противном случае это будет правильное обоснование.
for (Map.Entry<Object,Object> prop : System.getProperties().entrySet()) {
System.out.printf("%-30s : %50s%n", prop.getKey(), prop.getValue());
}
Это напечатает что-то вроде:
java.version : 1.6.0_07
java.vm.name : Java HotSpot(TM) Client VM
java.vm.vendor : Sun Microsystems Inc.
java.vm.specification.name : Java Virtual Machine Specification
java.runtime.name : Java(TM) SE Runtime Environment
java.vendor.url : http://java.sun.com/
Для более мощного форматирования сообщения вы можете использовать java.text.MessageFormat
.%n
- перевод строки (см. Ниже).
Шестнадцатеричное преобразование
System.out.println(Integer.toHexString(255));
// ff
System.out.printf("%d is %<08X", 255);
// 255 is 000000FF
Обратите внимание, что здесь также используется относительное индексирование <
(см. Ниже).
Форматирование с плавающей запятой
System.out.printf("%+,010.2f%n", 1234.567);
System.out.printf("%+,010.2f%n", -66.6666);
// +01,234.57
// -000066.67
Для более мощного форматирования с плавающей запятой вместо этого используйте DecimalFormat
.
%n
для линейного разделителя для платформы
System.out.printf("%s,%n%s%n", "Hello", "World");
// Hello,
// World
%%
для действительного %
-знака
System.out.printf("It's %s%% guaranteed!", 99.99);
// It's 99.99% guaranteed!
Обратите внимание, что double
литерал 99.99
автоматически упакован в Double
, для которого преобразование строки с использованием toString()
определено.
n$
для явной индексации аргументов
System.out.printf("%1$s! %1$s %2$s! %1$s %2$s %3$s!",
"Du", "hast", "mich"
);
// Du! Du hast! Du hast mich!
<
для относительной индексации
System.out.format("%s?! %<S?!?!?", "Who's your daddy");
// Who's your daddy?! WHO'S YOUR DADDY?!?!?
Смежные вопросы