如何用Java printf()方法实现终端菜单文本的对齐排版?
解决Java printf菜单文本对齐问题
问题出在你当前的格式串里:每行的描述文本长度不一致,导致后面的总计数字无法对齐。%10d是让数字占10位右对齐,但它是从行首开始计算位置的,前面的描述文本越长,数字就越靠后,自然间距就乱了。
修复方案很简单:把描述文本部分设为左对齐的固定宽度,让所有行的描述部分结束在同一位置,后面的总计数字就能整齐对齐了。
修改后的代码示例
// 将每行描述整合成字符串,用左对齐固定宽度占位符(宽度可根据最长描述调整) System.out.printf("%-45s %10d%n", String.format("%d Pygmy Puffs at %d Knuts ea.:", pygmy_ordered, pygmy), pygmy_total); System.out.printf("%-45s %10d%n", String.format("%d bags of Extendable ears at %d Knuts ea.:", extendable_ears_three_ordered, extendable_ears_three), extendable_ears_three_total);
原理说明
%-45s表示将字符串左对齐,且占满45个字符宽度,短文本会在右侧自动补空格填充到指定宽度。- 这样不管每行的描述文本长短,都会在同一位置结束,后面的
%10d就能保持统一的右对齐位置,最终输出的总计数字就整齐了。
你可以根据菜单里最长的那行描述,调整%-45s里的数字(比如最长描述是42字符,就设为%-42s),确保所有描述都能完整显示且对齐。
内容的提问来源于stack exchange,提问作者nordlord
相关产品推荐
相关产品推荐

