模式匹配问题

时间:2013-10-19 19:03:09

标签: java regex

所以我有一个看起来像这样的函数:

private int getNumber(String commandChunk)
    {
        Pattern pattern = Pattern.compile("R(\\d+)");
        Matcher m = pattern.matcher(commandChunk);
        return Integer.parseInt(m.group(1));
    }

用“R0”调用。我希望它返回int:0,但我在return语句中得到一个非法的状态异常。我究竟做错了什么?我无法理解为什么我不能说int myNum = getNumber("R0")myNum = 0结尾。

1 个答案:

答案 0 :(得分:5)

group如果没有matchesIllegalStateException,则会引发find。在调用matches之前调用group,以使表达式与完整的String匹配:

class NumberTest {
    final static Pattern pattern = Pattern.compile("R(\\d+)");

    public static void main(String[] args) {
        System.out.println(new NumberTest().getNumber("R0"));
    }

    private int getNumber(String commandChunk) {
        Matcher m = pattern.matcher(commandChunk);
        if (m.matches()) {
            return Integer.parseInt(m.group(1));
        } else {
            return -1;
        }
    }
}