Java 格式化字符串输出

Java 格式化字符串输出,java,string,format,printf,string-formatting,Java,String,Format,Printf,String Formatting,我正在尝试格式化字符串,使其打印出来的宽度始终为3,并且无论数字有多大,都以同一行结束。除一外,每一个数字都是十以下的小数;然而,当我打印10以上的数字时,它是一个小数,宽度是4,并且结束于前面数字的最后一位。我想让他们都在同一个地方结束,然后在右边排成一行。如何在Java中使用printf实现这一点 [a 4.34] [b 0.32] [c 12.52] 我希望每个人都像这样排队 [a 4.34] [b 0.32] [c 12.5] 这是我已经准备好的打印线 for(int i = 0;

我正在尝试格式化字符串,使其打印出来的宽度始终为3,并且无论数字有多大,都以同一行结束。除一外,每一个数字都是十以下的小数;然而,当我打印10以上的数字时,它是一个小数,宽度是4,并且结束于前面数字的最后一位。我想让他们都在同一个地方结束,然后在右边排成一行。如何在Java中使用printf实现这一点

[a 4.34]
[b 0.32]
[c 12.52]
我希望每个人都像这样排队

[a 4.34]
[b 0.32]
[c 12.5]
这是我已经准备好的打印线

for(int i = 0; i < 26;i++)
{
    System.out.printf("[%c %3.2f]\n", letters[i], frequencies[i]);
}
for(int i=0;i<26;i++)
{
System.out.printf(“[%c%3.2f]\n”,字母[i],频率[i]);
}
谢谢

更换

System.out.printf("[%c %3.2f]\n", letters[i], frequencies[i]);

“g”
表示小数点后的位置,而不是小数点后的位置,因此使用3


有关更多信息,请参阅。

假设数字始终小于100

private static DecimalFormat df1digit = new DecimalFormat("0.00");
private static DecimalFormat df2digit = new DecimalFormat("#.00");
private static DecimalFormat df3digit = new DecimalFormat("##.0");
您可以使用相关的十进制格式将数字与10和1进行比较。您可以将此想法扩展到数百万、数十亿等格式

if(x>10){
    System.out.println(df3digit.format(x));
}else if(x>1){
    System.out.println(df2digit.format(x));
}else{
    System.out.println(df1digit.format(x));
}

格式字符串中的0将处理纯整数(如果有),以便始终获得相同长度的数字。

如果要根据最宽的行改变结果宽度,请使用用户1544460给出的答案,或者使用相同的if-then-else结构定义多个print语句。如果您总是希望宽度相同(所有字符的最大值),则需要在格式化字符串中指定更多的数字

“%3.2f”的意思是“我想要一个总数至少有3个空格的数字,其中两个空格是小数点后的数值。”

改变

System.out.printf("[%c %3.2f]\n", letters[i], frequencies[i]);

假设最大值距离小数点还有3位

如果希望它动态工作,并调整大小以适应最大的行,请执行以下操作:

if(maxNum >= 100)
    System.out.printf("[%c %5.2f]\n", letters[i], frequencies[i]);
else if(maxNum >= 10)
    System.out.printf("[%c %4.2f]\n", letters[i], frequencies[i]);
else // If we get here, we've either coded something wrong, or it's less than 10.
    System.out.printf("[%c %3.2f]\n", letters[i], frequencies[i]);
System.out.printf("[%c %5.2f]\n", letters[i], frequencies[i]);
if(maxNum >= 100)
    System.out.printf("[%c %5.2f]\n", letters[i], frequencies[i]);
else if(maxNum >= 10)
    System.out.printf("[%c %4.2f]\n", letters[i], frequencies[i]);
else // If we get here, we've either coded something wrong, or it's less than 10.
    System.out.printf("[%c %3.2f]\n", letters[i], frequencies[i]);