1

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

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")end up with myNum = 0

4

1 回答 1

5

group抛出一个IllegalStateExceptionif 前面没有matchesor 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;
        }
    }
}
于 2013-10-19T19:04:48.097 回答