You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中System.out.printf格式化字符串实现列对齐的问题

搞定Java printf列对齐问题

嘿,我太懂这种用System.out.printf对齐列的烦恼了!尤其是遇到产品名称这种长度不一的字符串,很容易把后面的价格字段挤得乱七八糟。你说前两个值能对齐、第三个不行,大概率是没给变长的字符串字段设置固定宽度+左对齐,导致长名字把后面的价格位置给挤歪了。

给你一个直接能用的解决方案,针对你想要的输出效果,我们给每个字段明确指定宽度和对齐方式:

// 格式化模板:编号(3位宽) + 产品名(左对齐20位宽) + 价格(8位宽保留两位小数)
System.out.printf("%3d %-20s %8.2f%n", 601, "GoPro Hero5 Black", 276.95);
System.out.printf("%3d %-20s %8.2f%n", 602, "GoPro Hero5 Session", 199.00);
System.out.printf("%3d %-20s %8.2f%n", 611, "Canon EOS Rebel", 361.89);

运行这段代码会得到完美对齐的输出:

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

关键格式符拆解:

  • %3d:数字默认右对齐,占3个字符宽度,刚好适配你的三位编号,短数字会自动在左边补空格。
  • %-20s:-代表左对齐,20是固定宽度,不管产品名长短都会占满20个字符(短名字会在右边补空格),这样后面的价格字段就能牢牢固定在同一位置。
  • %8.2f:浮点数右对齐,8是总宽度(包含小数点和小数位),.2强制保留两位小数,确保所有价格的小数点精准对齐。

如果你的产品名更长,可以适当把20调大(比如改成25),只要保证所有产品名的长度都不超过这个值,后面的价格就再也不会错位啦!

内容的提问来源于stack exchange,提问作者user4780727

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:25:31