Java输出格式化问题:数值较小时输出数据列无法对齐如何解决?
问题原因
- 原代码使用制表符
\t实现对齐,制表符会自动跳转到下一个固定间隔的制表位(多数终端默认是8字符间隔),当同列内容的长度差异较大时,不同行跳转的制表位数量不同,最终导致列错位。
解决方法
放弃制表符对齐,改用String.format/System.out.printf的固定宽度格式化语法,为每一列预设统一的占位宽度即可实现精准对齐:
- 格式化语法规则:
%[正负号][宽度]格式符,负号代表左对齐,无负号默认右对齐,宽度为该列占用的字符数
例:%-20s代表占20字符宽度左对齐的字符串,%10.2f代表占10字符宽度、保留2位小数的右对齐浮点数
修改后可直接运行的代码
public void displayAllOrder() { // 模板中的宽度数值可根据实际最长内容调整,保证列宽大于最长内容长度即可 String colFormat = "%-18s %-20s %-25s %-15s %-15s %-20s%n"; // 输出表头 System.out.printf(colFormat, "Initial Cost", "Voucher Code Used", "Voucher Amount Deducted", "Final Cost", "Shipping ID", "Shipment Status"); for (int i = 0; i <= currentIndex; i++) { System.out.printf(colFormat, "$" + String.format("%.2f", initialCost[i]), voucherCode[i], "$" + String.format("%.2f", voucherAmount[i]), "$" + String.format("%.2f", finalCost[i]), shippingID[i], shipmentStatus[i]); } }
内容的提问来源于stack exchange,提问作者beginner_c0der
相关产品推荐
相关产品推荐

