所以我有一个看起来像这样的函数:
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
结尾。
答案 0 :(得分:5)
group
如果没有matches
或IllegalStateException
,则会引发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;
}
}
}