You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:42:11