编程语言
首页 > 编程语言> > 使用system.out.printf格式化java字符串

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

作者:互联网

我一直在寻找关于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是第一个和第二个输入之间的空格,然后?s将相隔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表示在字段中左对齐至少一个字符宽.但是您的第一列始终至少有3个字符宽,因此忽略了说明符.第一栏看起来整齐纯粹巧合:你的所有数字都碰巧有三位数.

同样,?意味着在一个至少10个字符宽的字段中对齐.但是你的所有摄像机名称都比这长得多,因此有效地忽略了说明符.

你可能正在寻找更像的东西

%-4s%-25s%6.2f

这意味着:

>左对齐字段中的第一个参数,至少4个字符宽
>左对齐字段中的第二个参数,宽度至少为25个字符
>在至少6个字符宽的字段中打印右对齐的数字,小数点后的两位数字

你可以用%3s< space>替换%4s为了类似的效果.不同之处在于如何处理溢出.第一个版本的第一列中的值不会超过3个字符.第二个会.

标签:java,printf,output,system-out
来源: https://codeday.me/bug/20190627/1304614.html