如何跳过首行后将文本每2行合并存入ArrayList?
解决文本文件跳过首行后每两行合并存入ArrayList的问题
现有代码的问题
- 原文件中没有空行,使用
split("\\n\\n")无法分割出目标元素 - 未实现跳过首行的逻辑
- 没有处理每两行合并的需求
正确实现方案
方案一:基于Apache Commons IO(延续你使用的工具类)
利用FileUtils.readLines()直接读取所有行到列表,跳过首行后按步长遍历拼接:
File file = new File(classLoader.getResource("name.txt").getFile()); // 读取所有行,自动适配不同系统的换行符 List<String> allLines = FileUtils.readLines(file, "UTF-8"); List<String> result = new ArrayList<>(); // 从索引1开始(跳过首行),每次步进2,取相邻两行拼接 for (int i = 1; i < allLines.size(); i += 2) { // 原文件数据是成对的,此处可省略越界判断;若数据不确定可添加i+1 < allLines.size()的条件 String combinedLine = allLines.get(i) + allLines.get(i + 1); result.add(combinedLine); }
方案二:原生Java实现(无需第三方库)
使用BufferedReader逐行读取,跳过首行后交替存储和拼接行:
File file = new File(classLoader.getResource("name.txt").getFile()); List<String> result = new ArrayList<>(); try (BufferedReader reader = new BufferedReader(new FileReader(file))) { // 跳过首行 reader.readLine(); String tempLine = null; String currentLine; while ((currentLine = reader.readLine()) != null) { if (tempLine == null) { // 存储第一行,等待下一行拼接 tempLine = currentLine; } else { // 拼接两行并加入结果列表,重置临时变量 result.add(tempLine + currentLine); tempLine = null; } } } catch (IOException e) { e.printStackTrace(); }
验证结果
两种方案最终得到的result列表都符合预期:
["1/name=Arwin2/Age=22","3/name=AJ4/Age = 27","5/name=Anna6/Age = 21","7/name=Avon8/Age = 25","9/name=Atman10/Age = 19"]
内容的提问来源于stack exchange,提问作者KKir
相关产品推荐
相关产品推荐

