5 java printf system.out output
我一直在寻找很多关于 java 中用于格式化字符串输出的 System.out.printf 的问题,但我似乎不明白如何使用它。
我正在尝试打印看起来像这样的漂亮列
601 GoPro Hero5 Black 276.95
602 GoPro Hero5 Session 199.00
611 Canon EOS Rebel 361.89
Run Code Online (Sandbox Code Playgroud)
但我能得到的最好的就是这个
601 GoPro Hero5 Black 276.95
602 GoPro Hero5 Session 199.00
611 Canon EOS Rebel 361.89
Run Code Online (Sandbox Code Playgroud)
我似乎能够对齐前两个值,但不能对齐第三个值。这是我的代码
System.out.printf("%-1s %10s %10.2f\n", "ex string", "ex string", 276.95);
Run Code Online (Sandbox Code Playgroud)
我认为“-1s”是左对齐的减号,1 将是第一个和第二个输入之间的空格,然后 %10s 将相隔十个字符,%10.2 将相隔十个并保留 2 个小数位。所以我试着做
System.out.printf("%-1s %10s %20.2f\n", "ex string", "ex string", 276.95);
Run Code Online (Sandbox Code Playgroud)
但这仍然没有使第三个值相互一致。
修改尝试使用
System.out.printf("%-10s %-10s %10.2f\n", "ex string", "ex string", 276.95);
Run Code Online (Sandbox Code Playgroud)
结果是...
601 GoPro Hero5 Black 276.95
602 GoPro Hero5 Session 199.00
611 Canon EOS Rebel 361.89
Run Code Online (Sandbox Code Playgroud)
为了记录我的代码正在获取这样的变量:
System.out.printf("%-10s %-10s %10.2f\n", items.get(i).getItemNumber(), items.get(i).getName(), items.get(i).getPrice());
Run Code Online (Sandbox Code Playgroud)
字段宽度说明符不是间距说明。
%-1表示在字段中左对齐至少一个字符宽。但是您的第一列始终至少有 3 个字符宽,因此会忽略说明符。纯粹出于巧合,第一列看起来很整齐:您的所有数字碰巧都有三位数。
相似地, %10表示在至少 10 个字符宽的字段中右对齐。但是您所有的相机名称都比这长得多,因此实际上忽略了说明符。
您可能正在寻找更像的东西
%-4s%-25s%6.2f
Run Code Online (Sandbox Code Playgroud)
这意味着:
你可以替换%4s使用%3s<space>了类似的效果。不同之处在于溢出的处理方式。第一个版本在第一列中长度超过 3 个字符的值后面没有空格。第二个会。
| 归档时间: |
|
| 查看次数: |
1082 次 |
| 最近记录: |