这些符号字符串是什么意思: %02d %01d?

2022-09-01 01:43:27

我正在查看类似于以下内容的代码行:

sprintf(buffer,"%02d:%02d:%02d",hour,minute,second);

我认为符号字符串是指每小时,每分钟等显示的数字字符数 - 或类似的东西,我不完全确定。

通常我可以弄清楚这种事情,但我无法在谷歌上找到任何有用的参考搜索“%02d %01d”。有人能为我阐明这一点吗?


答案 1

而不是谷歌搜索,你应该一直在搜索功能。%02dsprintf()

%02d表示“用 2 位数字格式化整数,用零填充它”,所以:

Format  Data   Result
%02d    1      01
%02d    11     11

答案 2

他们正在格式化 。Java特定的语法在java.util.Formatter中给出。String

一般语法如下:

   %[argument_index$][flags][width][.precision]conversion

%02d执行十进制整数转换,格式为零填充(标志),带宽度。因此,值为 的参数将设置为 。d02int7"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!

请注意,文本自动装箱到 ,在其上定义了字符串转换使用。double99.99DoubletoString()

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?!?!?

相关问题