0

我将如何解析以下字符串中的两个数字:

String fName = "Run_1_vs_2_pw_optimal_mapping.txt";

我试过这样,但它不起作用:

    Pattern filePatt = Pattern.compile("Run_(\\d+)_vs_(\\d+)_", Pattern.CASE_INSENSITIVE);

    Matcher scanner = this.filePatt.matcher(fName);
    while (scanner.find()) {
            int groupSize = scanner.groupCount();
            if (groupSize == 2) {
                firstRun = Integer.parseInt(scanner.group(0));
                secondRun = Integer.parseInt(scanner.group(1));
            }
            break;
     }

但是,这不起作用,因为scanner.group(0) 返回Run_1_vs_2。但为什么?

4

2 回答 2

2

请参阅文档

捕获组从左到右进行索引,从一个开始。组 0 表示整个模式,因此表达式 m.group(0) 等价于 m.group()。

使用group(1)group(2)

于 2012-12-06T17:34:21.643 回答
2

因为组号0对应全匹配。捕获数从 开始计算1。你想要的是捕获1(第一组括号)和2(第二组括号)。

于 2012-12-06T17:34:51.363 回答