基于JRE1.8.0+实现TXT文件每4行内容分组输出的问题
解决每4个物品分组输出的问题
嘿,这个分组需求很好实现!你现在的代码只是逐行打印内容,没做计数和分组逻辑,我给你两种适配不同场景的方案:
方案1:先收集所有物品再分组(适合小文件)
这种方式把所有物品先读到列表里,处理起来更直观,也方便后续调整分组规则:
import java.io.BufferedReader; import java.io.FileReader; import java.util.ArrayList; import java.util.List; public class ItemGrouping { public static void main(String[] args) { List<String> items = new ArrayList<>(); // 用try-with-resources自动关闭流,避免资源泄漏 try (BufferedReader lineReader = new BufferedReader(new FileReader("items.txt"))) { String lineText; // 读取所有物品到列表,同时去掉每行可能的多余空格 while ((lineText = lineReader.readLine()) != null) { items.add(lineText.trim()); } // 构建输出字符串 StringBuilder output = new StringBuilder(); for (int i = 0; i < items.size(); i++) { output.append(items.get(i)); // 逻辑判断:不是最后一个元素时,要么加空格,要么加分组分隔符 if ((i + 1) % 4 == 0 && i != items.size() - 1) { output.append(" -- "); } else if (i != items.size() - 1) { output.append(" "); } } // 打印最终结果 System.out.println(output.toString()); } catch (Exception e) { e.printStackTrace(); } } }
关键逻辑说明:
- 用
List收集所有物品,方便后续分组遍历 StringBuilder用来拼接输出,比直接用+拼接字符串性能更好- 通过
(i+1)%4 == 0判断是否到了每组的第4个元素,此时添加--分隔符(但最后一组之后不加) - 非分组节点的元素之间用空格分隔
方案2:逐行处理分组(适合大文件)
如果你的物品文件特别大,不想把所有内容加载到内存里,可以用这种逐行计数的方式:
import java.io.BufferedReader; import java.io.FileReader; public class ItemGrouping { public static void main(String[] args) { int itemCount = 0; try (BufferedReader lineReader = new BufferedReader(new FileReader("items.txt"))) { String lineText; StringBuilder currentGroup = new StringBuilder(); while ((lineText = lineReader.readLine()) != null) { String item = lineText.trim(); itemCount++; currentGroup.append(item); // 当凑够4个物品时,输出当前组 if (itemCount % 4 == 0) { System.out.print(currentGroup); currentGroup.setLength(0); // 重置当前组容器 // 检查是否还有下一行,决定是否输出分隔符 lineReader.mark(1000); // 标记当前位置 String nextLine = lineReader.readLine(); if (nextLine != null) { System.out.print(" -- "); lineReader.reset(); // 回到标记位置,继续读取下一行 } } else { currentGroup.append(" "); // 组内元素用空格分隔 } } // 处理最后一组不足4个的情况 if (currentGroup.length() > 0) { System.out.print(currentGroup.toString().trim()); } System.out.println(); } catch (Exception e) { e.printStackTrace(); } } }
关键逻辑说明:
- 用
itemCount计数,每读一个物品就加1 - 凑够4个时输出当前组,并用
mark和reset判断是否还有后续物品,决定是否添加-- - 最后处理剩余不足4个的物品,避免遗漏
两种方案都符合JRE1.8+的要求,你可以根据文件大小选择合适的版本~
内容的提问来源于stack exchange,提问作者Whatno
相关产品推荐
相关产品推荐

