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

如何使用Java FileReader读取特定格式文本文件并提取5个参数

如何用Java的FileReader提取特定格式的数值?

嘿,这个需求其实很好实现,咱们一步步来拆解:首先用FileReader配合BufferedReader读取文件内容(后者能提升读取效率,还方便逐行处理),再通过正则表达式精准匹配出你需要的5个整数值。下面是具体的实现思路和可直接运行的代码示例:

核心步骤说明

  • 读取文件:用FileReader打开文件,再套一层BufferedReader逐行读取,避免一次性加载大文件占用过多内存。
  • 正则匹配:针对你给出的格式BB [FL:60 BT:10 SG:20 MK:10 | 12],我们可以用正则表达式FL:(\\d+) BT:(\\d+) SG:(\\d+) MK:(\\d+) \\| (\\d+)来匹配——每个括号里的分组就是我们要提取的整数。
  • 提取数值:把匹配到的分组内容转换成int类型,就能单独使用这些数值了。

完整代码示例

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class FoodDataExtractor {
    public static void main(String[] args) {
        // 定义正则表达式,分组捕获需要的5个整数
        String regexPattern = "FL:(\\d+) BT:(\\d+) SG:(\\d+) MK:(\\d+) \\| (\\d+)";
        Pattern pattern = Pattern.compile(regexPattern);

        // 替换成你的实际文件路径
        String targetFilePath = "your_food_data.txt";

        // 使用try-with-resources自动关闭流,无需手动处理
        try (BufferedReader reader = new BufferedReader(new FileReader(targetFilePath))) {
            String currentLine;
            // 逐行读取文件
            while ((currentLine = reader.readLine()) != null) {
                Matcher matcher = pattern.matcher(currentLine);
                // 如果当前行符合目标格式
                if (matcher.find()) {
                    // 提取每个分组的数值并转换为整数
                    int flParam = Integer.parseInt(matcher.group(1));
                    int btParam = Integer.parseInt(matcher.group(2));
                    int sgParam = Integer.parseInt(matcher.group(3));
                    int mkParam = Integer.parseInt(matcher.group(4));
                    int cookDuration = Integer.parseInt(matcher.group(5));

                    // 这里可以根据你的需求处理这些数值,比如打印、存储到集合等
                    System.out.printf("提取结果:FL=%d, BT=%d, SG=%d, MK=%d, 制作时长=%d%n",
                            flParam, btParam, sgParam, mkParam, cookDuration);
                }
            }
        } catch (IOException e) {
            // 处理文件读取时的异常,比如文件不存在、权限问题等
            System.err.println("读取文件时发生错误:" + e.getMessage());
            e.printStackTrace();
        }
    }
}

代码关键点解释

  • try-with-resources:Java 7+的特性,会自动关闭实现了AutoCloseable的资源(比如这里的BufferedReader和FileReader),不用手动写close()方法,避免资源泄漏。
  • 正则分组:正则里的\\d+匹配一个或多个数字,括号()把匹配内容标记为分组,后续用matcher.group(n)就能获取第n个分组的内容。
  • 逐行处理:适合处理大文件,不会把整个文件加载到内存里,性能更优。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:57:44