Java中格式化无预定长度字符串的实现方案咨询
动态指定格式化长度实现表格打印
- 其实
String.format完全支持用变量指定长度,只需把固定数字替换成占位符并传入长度参数即可,示例代码如下:// 按需定义各列的宽度变量 int col1Width = 10; int col2Width = 15; int col3Width = 20; int col4Width = 12; int col5Width = 18; // 格式化表头行 String header = String.format("%-" + col1Width + "s %-" + col2Width + "s %-" + col3Width + "s %-" + col4Width + "s %-" + col5Width + "s", "序号", "任务1", "任务2", "任务3", "任务4"); System.out.println(header); // 格式化数据行 String dataRow = String.format("%-" + col1Width + "d %-" + col2Width + "s %-" + col3Width + "s %-" + col4Width + "s %-" + col5Width + "s", 1, "完成用户认证", "处理订单支付", "生成物流单号", "发送通知邮件"); System.out.println(dataRow); - 关键说明:
- 通过字符串拼接
"%-" + colWidth + "s"动态生成格式符,其中%-代表左对齐(若需要右对齐去掉-即可),colWidth可以是根据表头、内容长度动态计算出的数值。 - 如果想让表格更规整,可先遍历所有数据,统计每列内容的最大长度,再用这个最大值作为格式化时的列宽参数。
- 通过字符串拼接
- 另一种更直观的实现方式是使用
Formatter类,逻辑和String.format一致,但动态设置格式的过程更清晰:Formatter formatter = new Formatter(System.out); int col2Width = 15; formatter.format("%-10s %-" + col2Width + "s%n", "序号", "任务1"); formatter.close();
内容的提问来源于stack exchange,提问作者Александр
相关产品推荐
相关产品推荐

