使用system.out.printf格式化java字符串

时间:2018-04-02 01:33:09

标签: java printf output system.out

我一直在寻找关于java中System.out.printf的许多问题,用于格式化字符串输出,我似乎并不理解如何使用它。

我正在尝试打印看起来像这样的漂亮列

601 GoPro Hero5 Black       276.95
602 GoPro Hero5 Session     199.00
611 Canon EOS Rebel         361.89

但我能得到的最好的就是这个

601 GoPro Hero5 Black     276.95
602 GoPro Hero5 Session     199.00
611 Canon EOS Rebel     361.89

我似乎能够对齐前两个值,但从不对齐第三个值。这是我的代码

System.out.printf("%-1s %10s %10.2f\n", "ex string", "ex string", 276.95);

我认为“-1s”左对齐为负,1是第一个和第二个输入之间的空格,然后%10s将相隔10个字符,%10.2将相隔10个小数点后2位。所以我试着做了

System.out.printf("%-1s %10s %20.2f\n", "ex string", "ex string", 276.95);

但是这仍然没有让那些第三个值彼此内联。

使用

修改尝试
System.out.printf("%-10s %-10s %10.2f\n", "ex string", "ex string", 276.95);

导致......

601        GoPro Hero5 Black     276.95
602        GoPro Hero5 Session     199.00
611        Canon EOS Rebel     361.89

对于记录,我的代码得到的变量如下:

System.out.printf("%-10s %-10s %10.2f\n", items.get(i).getItemNumber(), items.get(i).getName(), items.get(i).getPrice());

1 个答案:

答案 0 :(得分:3)

字段宽度说明符不是间距规格。

%-1表示在字段中左对齐至少一个字符宽。但是您的第一列始终至少有3个字符宽,因此忽略了说明符。第一栏看起来整齐纯粹巧合:你的所有数字都碰巧有三位数。

同样,%10表示在一个至少10个字符宽的字段中右对齐。但是你的所有摄像机名称都比这长得多,所以说明符被忽略了。

你可能正在寻找更像

的东西
%-4s%-25s%6.2f

这意味着:

  1. 左对齐字段中的第一个参数,至少4个字符宽
  2. 左对齐字段中的第二个参数,至少25个字符
  3. 打印右对齐的数字,小数点后两位数,至少6个字符宽的字段
  4. 您可以将%4s替换为%3s<space>以获得类似的效果。不同之处在于如何处理溢出。第一个版本的第一列中的值不会超过3个字符。第二个会。