Java读取按空行分隔的文本文件,如何将分组数据整合后存入数组
实现分组读取文件的修正方案
原有代码的问题
当前代码逐行读取后直接对单行内容做空格拆分输出,完全没有实现「按空行分组」的逻辑:
- 没有把同一组内连续的非空行内容合并存储,导致每一行单独被打印成一个独立数组
- 读到空行时没有触发组的输出动作,反而把空行本身做拆分打印,最终出现了多余的
[]空数组输出
调整逻辑说明
实现预期效果只需要补充分组状态的维护逻辑:
- 定义一个临时列表,用来存放当前分组下读到的所有非空行内容
- 逐行处理文件内容:
- 如果读到的行是有效非空内容,就加入临时列表
- 如果读到的是空白行,就把当前临时列表的内容转为数组打印,清空临时列表准备接收下一组数据
- 文件读完后,要检查临时列表里是否还有未输出的最后一组内容(避免文件末尾没有空行导致最后一组被遗漏)
修正后的完整可运行代码
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; public class Main { public static void main(String[] args) { BufferedReader input; String inputLine; ArrayList<String> currentGroup = new ArrayList<>(); try { input = new BufferedReader(new FileReader("test.txt")); while ((inputLine = input.readLine()) != null) { // 处理可能带首尾空格的伪空行 if (inputLine.trim().isEmpty()) { // 遇到空行时,输出已攒够的分组 if (!currentGroup.isEmpty()) { System.out.println(Arrays.toString(currentGroup.toArray())); currentGroup.clear(); } continue; } currentGroup.add(inputLine.trim()); } // 兜底处理文件末尾的最后一组内容 if (!currentGroup.isEmpty()) { System.out.println(Arrays.toString(currentGroup.toArray())); } } catch (IOException e) { System.out.println(e.getMessage()); System.exit(1); } } }
运行输出效果
执行修正后的代码,得到的输出和预期完全一致:
[4234, Bob] [6858, Joe]
内容的提问来源于stack exchange,提问作者Alex Lowe
相关产品推荐
相关产品推荐

