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

Java实现按指定起止关键词读取文本文件内容的方法

Java实现指定账号区间内容读取方案

实现思路

  • 定义标记位isReading,初始为false,用来标识是否处于目标内容读取区间
  • 逐行读取文本文件,每行先判断是否为账号起始行:行首去除空白后是否为4位数字格式的账号
  • 当匹配到目标账号1056时,将isReading设为true,开始保存行内容
  • 后续读取行时如果检测到新的账号行且账号不是1056,将isReading设为false,直接终止读取即可
  • 如果读取到文件末尾还没有遇到下一个账号,也自动终止读取

完整代码示例

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;

public class ReadAccountContent {
    // 匹配行首是4位数字账号的正则,兼容行首带空格的格式
    private static final Pattern ACCOUNT_PATTERN = Pattern.compile("^\\s*\\d{4}\\s+");

    public static void main(String[] args) {
        String targetAccount = "1056";
        String filePath = "你的文本文件路径.txt"; // 替换为实际的本地文件路径
        List<String> result = readContentByAccount(targetAccount, filePath);
        
        // 输出读取结果
        System.out.println("账号" + targetAccount + "对应的内容:");
        result.forEach(System.out::println);
    }

    public static List<String> readContentByAccount(String targetAccount, String filePath) {
        List<String> contentList = new ArrayList<>();
        boolean isReading = false;

        // try-with-resources语法自动关闭流,无需手动释放资源
        try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
            String line;
            while ((line = br.readLine()) != null) {
                boolean isAccountLine = ACCOUNT_PATTERN.matcher(line).find();
                if (isAccountLine) {
                    // 提取当前行的账号
                    String currentAccount = line.trim().split("\\s+")[0];
                    if (currentAccount.equals(targetAccount)) {
                        isReading = true;
                        contentList.add(line);
                    } else if (isReading) {
                        // 已进入读取状态,遇到下一个账号直接终止循环
                        break;
                    }
                } else if (isReading) {
                    // 非账号行且处于读取状态,直接保存内容
                    contentList.add(line);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return contentList;
    }
}

补充说明

如果你只需要输出内容不需要保存,也可以直接在读取到对应行的时候打印,不需要额外用List存储。代码里的正则也可以根据你实际的账号格式调整,如果账号长度不是固定4位,修改正则里的\\d{4}对应规则即可。

内容的提问来源于stack exchange,提问作者user4383047

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 13:48:01