Ответ 1
http://www.cplusplus.com/reference/clibrary/cstdio/printf/
те же правила должны применяться к Java.
в вашем случае это означает вывод целочисленных значений в 2 или более числах, первый из которых равен нулю, если число меньше или равно 9
Я смотрю на строку кода, похожую на:
sprintf(buffer,"%02d:%02d:%02d",hour,minute,second);
Я думаю, что символические строки относятся к числу числовых символов, отображаемых в час, минуту и т.д. - или что-то в этом роде, я не совсем уверен.
Обычно я могу понять такую вещь, но мне не удалось найти полезный справочный поиск "% 02d% 01d" в google. Кто-нибудь может пролить свет на это для меня?
http://www.cplusplus.com/reference/clibrary/cstdio/printf/
те же правила должны применяться к Java.
в вашем случае это означает вывод целочисленных значений в 2 или более числах, первый из которых равен нулю, если число меньше или равно 9
Вместо googling для %02d
вы должны были искать функцию sprintf()
.
%02d
означает "форматировать целое число с двумя цифрами, оставляя его заполнением нулями", поэтому:
Format Data Result %02d 1 01 %02d 11 11
Они форматируются 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
%%
для фактического %
-signSystem.out.printf("It %s%% guaranteed!", 99.99);
// It 99.99% guaranteed!
Обратите внимание, что double
literal 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 your daddy");
// Who your daddy?! WHO YOUR DADDY?!?!?
MessageFormat
с примеромОтвет от Александра относится к полным документам...
Ваш простой пример из вопроса просто распечатывает эти значения с двумя цифрами - при необходимости добавляет 0.
http://en.wikipedia.org/wiki/Printf#printf_format_placeholders
В статье рассказывается о классе функций printf на нескольких языках, начиная с 50-х и до наших дней.
% - это специальный символ, который вы помещаете в строки формата, например, на языке C printf и scanf (и в семействе), который в основном говорит: "Это место для чего-то другого, чтобы не печататься/читать буквально".
Например,
(%02d)
в строке формата для printf является заполнителем для целочисленной переменной, которая будет напечатана десятичным(%02d)
и дополнена как минимум двумя цифрами, при необходимости нулями.Фактическое целое число предоставлено вами в аргументе функции, например.
printf("%02d",5);
будет печатать05
на экране,(%01d)
также работает аналогично
То же самое для Java и других языков:)