Java读取文件后用printf格式化输出字段遇格式失效问题求助
问题原因分析
你现在的代码只是把整条未拆分的记录字符串直接传给printf,它自然只会把这个字符串当成一个整体来格式化,完全不知道你要把长字符串拆分成ID、姓名等独立字段——这就是格式化失效、直接输出整条记录的核心原因。
解决步骤
要实现预期的对齐输出,核心是先把每条紧凑记录拆分成单独字段,再对每个字段分别应用格式化规则。
1. 明确字段拆分规则
因为你的记录是无间隔的紧凑字符串,必然是按固定长度拼接的。以你给出的示例"000001BilboBagginsEsq.1020"为例,拆分规则可以是:
- ID:前6位 →
"000001" - 名:接下来的5位 →
"Bilbo" - 姓:再接下来的7位 →
"Baggins" - 头衔:再接下来的4位 →
"Esq." - 出生年份:最后4位 →
"1020"
如果你的实际字段长度不同,只需要调整对应的索引即可。
2. 修改代码实现拆分与格式化
把原来直接输出整条记录的逻辑,改成先拆分字段,再用printf分别格式化每个字段:
while(reader.ready()) { rec = reader.readLine(); line++; // 拆分字段(根据你的实际字段长度调整索引) String id = rec.substring(0, 6); String firstName = rec.substring(6, 11); // 6到11是名的范围 String lastName = rec.substring(11, 18); // 11到18是姓的范围 String title = rec.substring(18, 22); // 18到22是头衔范围 String birthYear = rec.substring(22); // 从22到末尾是出生年份 // 按预期格式输出,-表示左对齐,数字是字段占用的字符宽度 System.out.printf("\n%4d %-15s %-15s %-15s %-12s %s", line, id, firstName, lastName, title, birthYear); } reader.close(); System.out.println("\n\nData file read!");
3. 调整格式化参数适配需求
上面的printf格式串中:
%-15s表示左对齐,占15个字符宽度,字段内容不足时自动用空格补全- 你可以根据期望的间距调整宽度数值(比如把
%-15s改成%-20s来增加空格) - 如果ID需要右对齐,去掉
-即可,比如%15s
额外优化建议
- 可以添加字段拆分的合法性检查,比如判断
rec的长度是否符合预期,避免出现StringIndexOutOfBoundsException - 如果字段长度不是固定的(比如姓名长度不固定),那你需要补充其他拆分规则(但你的记录是无间隔紧凑格式,大概率是固定长度拼接)
内容的提问来源于stack exchange,提问作者mole7
相关产品推荐
相关产品推荐

