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

如何从含J-前缀的文件字符串提取整数并存储到二维数组?

解决从文本提取编号并填充二维数组的正则问题

我明白你现在卡在了用正则提取文本里的编号,没法正确填充到270行×10列的二维数组里。别担心,咱们一步步把这个问题搞定。

问题拆解

你的每行文本都是J-XXXX J-XXXX ... vs ... J-XXXX的格式,每行刚好有10个带J-前缀的四位数字。核心需求就是把这些数字提取出来,按行存到二维数组里——问题就出在之前的正则没精准匹配到这些数字。

正确的正则表达式

你需要的正则要精准定位J-后面的四位数字,用捕获组把数字单独拎出来:

Pattern pattern = Pattern.compile("J-(\\d{4})");
  • J-:匹配固定的前缀部分
  • (\\d{4}):捕获组,专门匹配并提取后面的四位数字(\\d代表数字,{4}限定长度为4)

完整代码实现

下面是整合了文件读取、正则提取和数组填充的完整代码,直接就能用:

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

public class NumberArrayFiller {
    public static void main(String[] args) {
        // 初始化目标二维数组:270行,每行10个整数
        int[][] idArray = new int[270][10];
        String targetFile = "你的文件路径.txt"; // 记得替换成你的实际文件路径
        Pattern numPattern = Pattern.compile("J-(\\d{4})");

        try (BufferedReader reader = new BufferedReader(new FileReader(targetFile))) {
            String currentLine;
            int currentRow = 0;

            // 逐行读取文件,直到读完或填满270行
            while ((currentLine = reader.readLine()) != null && currentRow < 270) {
                Matcher matcher = numPattern.matcher(currentLine);
                int currentCol = 0;

                // 提取当前行的所有匹配数字,填充到当前行的数组中
                while (matcher.find() && currentCol < 10) {
                    // 把捕获到的数字字符串转成整数,存入数组
                    idArray[currentRow][currentCol] = Integer.parseInt(matcher.group(1));
                    currentCol++;
                }

                currentRow++;
            }

            // 可选:打印前几行验证结果
            for (int i = 0; i < 5; i++) {
                for (int num : idArray[i]) {
                    System.out.print(num + " ");
                }
                System.out.println();
            }

        } catch (IOException e) {
            System.err.println("读取文件时出错:" + e.getMessage());
            e.printStackTrace();
        }
    }
}

关键代码说明

  1. 数组初始化:直接创建int[270][10]的二维数组,提前预留好存储空间。
  2. 正则预编译:把正则表达式预编译成Pattern对象,避免重复编译提升效率。
  3. 逐行读取与匹配:用BufferedReader高效读文件,每行用Matcher遍历所有符合规则的数字,通过matcher.group(1)拿到捕获的数字内容。
  4. 边界防护:加了currentRow < 270和currentCol < 10的判断,防止数组越界报错。

这样就能准确把所有数字提取出来,乖乖填到二维数组里了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:55:49