Я смотрю на строку кода, подобную:
sprintf(buffer,"%02d:%02d:%02d",hour,minute,second);
Я думаю, что символьные строки относятся к количеству цифровых символов, отображенных в час, минуту и т.д. - или что-то как этот, я не совсем уверен.
Обычно я могу понять этот вид вещи, но я не мог найти любую полезную ссылку, ищущую "%02d %01d" на Google. Кто-либо, который в состоянии проливать некоторый свет на это для меня?
http://www.cplusplus.com/reference/clibrary/cstdio/printf/
те же правила должны применяться к Java.
в вашем случае это означает вывод целочисленных значений, состоящих из 2 или более цифр, первая из которых равна нулю, если число меньше или равно 9
http://en.wikipedia.org/wiki/Printf#printf_format_placeholder
В статье рассказывается о классе функций printf на нескольких языках с 50-х годов до наших дней.
Они форматируют Строку
. Специфический синтаксис 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!
Обратите внимание, что двойной
литерал 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?!?!?
MessageFormat
с примером Ответ от Александра ссылается на полную документацию...
Ваш простой пример из вопроса просто распечатывает эти значения с 2 цифрами - добавляя ведущий 0, если необходимо.
Вместо того, чтобы искать в гугле %02d
, вы должны были искать sprintf()
функцию.
%02d
означает "форматировать целое число двумя цифрами, заполняя его слева нулями", поэтому:
Format Data Result %02d 1 01 %02d 11 11