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
相关产品推荐
相关产品推荐

