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

我正在寻找类似于的代码行:

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

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

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

http://www.cplusplus.com/reference/clibrary/cstdio/printf/

相同的规则应该适用于Java。

在您的情况下,它表示输出2位或更多位的整数值,如果小于或等于9,则第一个为零

而不是谷歌搜索%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 。 因此,其值为7int参数将被格式化为"07"作为String

您还可以在例如String.format看到此格式化字符串。


常用格式

这些只是一些常用的格式,并没有详尽地涵盖语法。

零填充数字

 System.out.printf("Agent %03d to the rescue!", 7); // Agent 007 to the rescue! 

理由宽度

您可以使用-标志进行左对齐; 否则这是正确的理由。

 for (Map.Entry 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是换行符转换(见下文)。

hex转换

 System.out.println(Integer.toHexString(255)); // ff System.out.printf("%d is %<08X", 255); // 255 is 000000FF 

请注意,这也使用< relative indexing(见下文)。

浮点格式

 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 

%%表示实际的% -sign

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

相关问题

  • 为什么String的格式(Object ... args)被定义为静态方法?
  • 转义java String.format中的格式化字符
  • 在Java中使用String.format而不是字符串连接是更好的做法吗?
  • 如果性能很重要,我应该使用Java的String.format()吗?
  • 理解Java中的$格式字符串
  • java decimal字符串格式
  • system.out.printf和String.format之间的区别
  • 你用什么类来制作字符串模板? - MessageFormat示例

亚历山大的答案是指完整的文档……

您在问题中的简单示例只是用2位数字打印出这些值 – 必要时附加前导0。

http://en.wikipedia.org/wiki/Printf#printf_format_placeholders

这篇文章是关于printf函数的 ,有几种语言,从50年代到今天。

是放在格式字符串中的特殊字符,例如在C语言printf和scanf(和系列)中,它基本上表示“这是其他东西的占位符,不能按字面打印/读取”。

例如,printf的格式字符串中的(%02d)是整数变量的占位符,将以十进制(%02d)打印并填充至少两位数,必要时使用零。

实际的整数由函数的参数提供,例如printf("%02d",5); 将在屏幕上打印05(%01d)也可以类似地工作

同样适用于Java和其他语言:)