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的热爱,请将该模式设置为常量。为什么每次调用该方法时都要重新编译它?