Java printf()输出中的混乱

Java printf()输出中的混乱,java,Java,我正在做一些使用format()和printf()方法格式化字符串的示例练习。 下面是一个示例,我对其输出感到困惑,请帮助 int i2= 12345; //Total length of the argument should be 7 and pad with zeros System.out.printf(">%0,7d< \N",i2); inti2=12345; //参数的总长度应为7,并用零填充 System.out.printf(“>%0,7d012345< 如果我

我正在做一些使用
format()
printf()
方法格式化字符串的示例练习。 下面是一个示例,我对其输出感到困惑,请帮助

int i2= 12345;
//Total length of the argument should be 7 and pad with zeros
System.out.printf(">%0,7d< \N",i2);
inti2=12345;
//参数的总长度应为7,并用零填充
System.out.printf(“>%0,7d<\N”,i2);
输出是

>012,345<
>012345<
如果我们看到,论点的长度是6。但是分隔符也算在内吗 它的长度。如果不是,那么我认为输出应该是这样的

>001,2345<
>0012345<
请帮助澄清这一疑问。

的javadoc页面在解释宽度时没有提到对分组分隔符的任何特殊处理,它只涉及字符数:

可选宽度是非负十进制整数,表示要写入输出的最小字符数


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

请参阅帮助页。基本结构是(单击查看)

根据本文件:

宽度指格式化值的最小宽度;价值是 如有必要,请加垫。默认情况下,该值用空格填充


没错,丹。我使用的不是精确的。您准确地回答了我,逗号和所有包含在格式化字符串中的内容。非常感谢。但是格式化指令是“>%0,7d<\N”而不是%07D,事实上,正如Dan所指出的,格式化字符串中的逗号和全部似乎包含在总宽度中。请参考下面他的答案。关于格式化程序的定义,with是一个非负整数,表示最小字符数,“,”实际上是一个字符。是的,
添加了分组分隔符,正如Dan指出的,但我想根据你的问题,你已经知道了。是的,非常感谢。非常感谢您的详细回复。