Java 模式匹配问题

Java 模式匹配问题,java,regex,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,但是我在retu

我有一个函数,看起来像这样:

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
结束,如果前面没有或
find
,则抛出
非法状态异常。调用
组之前调用
匹配
,以便表达式匹配完整的
字符串

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;
        }
    }
}
如果前面没有或
find
,则抛出
IllegalStateException
。调用
组之前调用
匹配
,以便表达式匹配完整的
字符串

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;
        }
    }
}

引用javadoc,“匹配器的显式状态最初是未定义的;在成功匹配之前尝试查询其中的任何部分将导致抛出IllegalStateException。每个匹配操作都会重新计算匹配器的显式状态。”但是我的正则表达式呢?为什么它不匹配一个组?因为您没有调用
matches
(或
find
),所以它会在表达式匹配之前抛出一个
IllegalStateException
。看演示,我现在明白了。谢谢引用javadoc,“匹配器的显式状态最初是未定义的;在成功匹配之前尝试查询其中的任何部分将导致抛出IllegalStateException。每个匹配操作都会重新计算匹配器的显式状态。”但是我的正则表达式呢?为什么它不匹配一个组?因为您没有调用
matches
(或
find
),所以它会在表达式匹配之前抛出一个
IllegalStateException
。看演示,我现在明白了。谢谢出于对FSM的热爱,请将图案设置为常量。为什么每次调用该方法时都要重新编译它?出于对FSM的热爱,请将该模式设置为常量。为什么每次调用该方法时都要重新编译它?