Что означают эти символьные строки: %02d %01d?
Я смотрю на строку кода, похожую на:
sprintf(buffer,"%02d:%02d:%02d",hour,minute,second);
Я думаю, что символьные строки относятся к числу числовых символов, отображаемых за час, минуту и т. Д. - или что-то в этом роде, я не совсем уверен.
Обычно я могу разобраться в этом, но мне не удалось найти какую-либо полезную ссылку для поиска "%02d %01d" в Google. Кто-нибудь может пролить свет на это для меня?
6 ответов
http://www.cplusplus.com/reference/clibrary/cstdio/printf/
те же правила должны применяться к Java.
в вашем случае это означает вывод целых значений в 2 или более цифр, первая из которых равна нулю, если число меньше или равно 9
Вместо поиска в Google %02d
ты должен был искать sprintf()
функция.
%02d
означает "отформатировать целое число из 2 цифр, добавив слева его нули", поэтому:
Формат данных Результат %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
%%
для фактического %
-знак
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?!?!?
Смежные вопросы
- Почему формат String (Object... args) определяется как статический метод?
- экранирование символов форматирования в Java String.format
- Лучше ли использовать String.format поверх конкатенации строк в Java?
- Должен ли я использовать Java String.format(), если важна производительность?
- Понимание $ в строках формата Java
- строковый формат java
- разница между system.out.printf и String.format
- Какие классы вы используете для создания шаблонов строк? -
MessageFormat
с примером
% - это специальный символ, который вы помещаете в строки формата, например, в printf и scanf на языке C, и который в основном говорит: "это заполнитель чего-то другого, а не печатать / читать буквально".
Например,
(%02d)
в строке формата для printf является заполнителем для целочисленной переменной, которая будет напечатана в десятичном виде(%02d)
и дополняется, по крайней мере, до двух цифр, при необходимости нулями.Фактическое целое число предоставляется вами в качестве аргумента функции, например
printf("%02d",5);
будет печатать05
на экране,(%01d)
также работает аналогично
То же самое касается Java и других языков:)
Ответ Александра относится к полным документам...
Ваш простой пример из вопроса просто распечатывает эти значения с 2 цифрами - добавляя ведущий 0, если необходимо.
http://en.wikipedia.org/wiki/Printf
Статья посвящена классу функций printf на нескольких языках с 50-х годов до наших дней.