如何从含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(); } } }
关键代码说明
- 数组初始化:直接创建
int[270][10]的二维数组,提前预留好存储空间。 - 正则预编译:把正则表达式预编译成
Pattern对象,避免重复编译提升效率。 - 逐行读取与匹配:用
BufferedReader高效读文件,每行用Matcher遍历所有符合规则的数字,通过matcher.group(1)拿到捕获的数字内容。 - 边界防护:加了
currentRow < 270和currentCol < 10的判断,防止数组越界报错。
这样就能准确把所有数字提取出来,乖乖填到二维数组里了!
内容的提问来源于stack exchange,提问作者Ilan
相关产品推荐
相关产品推荐

