java中用formatter实现表格对齐需控制列宽与对齐方式:%-12s左对齐占12宽,%10s右对齐占10宽,%8d整数右对齐占8宽;动态数据需先遍历统计各列最大宽度再格式化。

Java 中用 Formatter(或更常用的 String.format() / System.out.printf())实现表格对齐,核心是掌握格式化字符串中的**宽度、对齐方式和填充字符**。它不是自动建表,而是靠精确控制每列的最小宽度和左右对齐来模拟整齐表格。
指定列宽与左/右对齐
格式说明符形如 %[标志][宽度][.精度]类型,表格对齐关键在 标志 和 宽度:
-
%-10s:字符串左对齐,占至少 10 字符宽,不足右补空格 -
%10s:字符串右对齐(默认),占至少 10 字符宽,不足左补空格 -
%-8d:整数左对齐,最小宽度 8 -
%12.2f:浮点数右对齐,总宽至少 12,小数位固定 2 位
用 printf 拼出带表头的简单表格
以下代码输出三列对齐的用户信息表:
System.out.printf("%-12s %-10s %8s%n", "姓名", "城市", "年龄");
System.out.printf("%-12s %-10s %8d%n", "张三", "北京", 28);
System.out.printf("%-12s %-10s %8d%n", "李四丰", "深圳", 35);
System.out.printf("%-12s %-10s %8d%n", "王五", "杭州", 22);
输出效果:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
姓名 城市 年龄 张三 北京 28 李四丰 深圳 35 王五 杭州 22
注意:%n 是平台无关换行符;各列宽度需根据实际数据最长项预估,否则会错位。
处理动态数据:先找最大宽度再格式化
若数据来自集合,建议先遍历一遍,统计每列最大长度(含表头),再统一设定宽度:
- 对字符串列:用
Math.max(maxLen, str.length()) - 对数字列:考虑负号、小数点、千分位等,通常按格式化后字符串长度算(如
String.format("%d", num).length()) - 最终用计算出的宽度拼格式串,例如
String.format("%-" + nameWidth + "s %-" + cityWidth + "s %"+ ageWidth +"d", ...)
进阶:添加分隔线与固定宽度容器
纯 Formatter 不提供边框,但可用重复字符模拟:
- 用
String.join("", Collections.nCopies(width, "-"))生成横线 - 每行前后加
|,列间加|,形成类似| 张三 | 北京 | 28 | - 确保所有行(包括分隔线)总宽度一致,否则视觉错乱
这种写法适合日志、命令行工具等轻量场景;如需复杂表格(合并单元格、颜色、导出 Excel),应改用专用库如 Apache POI 或 Tabular。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










