2013-07-23 92 views
3

我正在做一些格式化字符串的示例练习,使用format()printf()方法。 这里是一个例子,其输出我很困惑,请帮助。printf()输出中的混淆

int i2= 12345; 
//Total length of the argument should be 7 and pad with zeros 
System.out.printf(">%0,7d< \N",i2); 

输出是

>012,345< 

如果我们看到,争论的时间是6。但是,分隔符是否也计入其长度为 。如果不是,那么根据我的输出结果应该是这样。

>001,2345< 

请帮助澄清这个疑问。

回答

3

Formatter的Javadoc页面没有提到解释宽度时分组分隔符的任何特殊处理,它只是关于字符数量会谈:

可选width是一个非负十进制整数,表示要写入输出的最小字符数。

+0

但是,格式化指令是“>%0,7d <\ N”而不是%07D,事实上格式化字符串中的逗号和全部似乎包含在Dan指出的总宽度中。请参阅下面的答案。参考Formatter的定义,其中是一个表示最小字符数的非负整数,“,”的确是一个字符。 – benz

+1

是的,'''增加了分组分隔符,丹指出,但我想你已经知道,根据你的问题。 – Keppil

+0

是的,感谢一吨Keppil。非常感谢您的详细回复。 – benz

1

您使用逗号和正在打印的整数,这意味着“7”是一个宽度,而不是一个精度。宽度值是指整个格式化的字符串,包括前导零,空格,逗号,小数点和负号。

+0

这是正确的丹。我用的不精确。你恰好回答我逗号和一切都包含在格式化的字符串中。万分感谢。 – benz

0

请参阅IO Formatting帮助页面。基本结构是following(点击查看)。

根据该文档:

宽度是指格式化值的最小宽度;如有必要,值为 。默认情况下,该值左侧填充空白。