为什么 Matcher.group() 抛出非法状态异常?
Why is Matcher.group() throwing illegal state exception?
为什么下面的代码可以正常工作
Matcher reg = Pattern.compile("(A|B)\w{2}(C|D)").matcher("");
while ((line=reader.readLine()) != null)
{
if (!loading || reg.reset(line).matches())
{
if (reg.reset(line).matches()) {
String id = reg.group(1);
}
}
}
但是
while ((line=reader.readLine()) != null)
{
if (!loading || reg.reset(line).matches())
{
String id = reg.group(1);
}
}
抛出 IllegalSyntaxException?
我很惊讶,因为我已经在 if 条件下调用了匹配项。期望是它 returns 与组匹配的字符串,而是抛出异常。
java.lang.IllegalStateException: No match found
我错过了什么?
如果loading == false
,reg.reset(line).matches()
不会被执行,因为!loading
已经是true
。在您的第一个示例中,然后 "again" 检查是否存在匹配项,然后才尝试获取该组。在你的第二个例子中,你只是假设有一场比赛因为你到了那里,这可能不是真的。
如果您发布的代码就是您在此 if
语句中所做的全部,您可以去掉 !loading
检查,因为它是真还是假都没有关系 - 因为一旦找到匹配,就会执行正文中的代码,如果找不到匹配,则不会执行。
为什么下面的代码可以正常工作
Matcher reg = Pattern.compile("(A|B)\w{2}(C|D)").matcher("");
while ((line=reader.readLine()) != null)
{
if (!loading || reg.reset(line).matches())
{
if (reg.reset(line).matches()) {
String id = reg.group(1);
}
}
}
但是
while ((line=reader.readLine()) != null)
{
if (!loading || reg.reset(line).matches())
{
String id = reg.group(1);
}
}
抛出 IllegalSyntaxException?
我很惊讶,因为我已经在 if 条件下调用了匹配项。期望是它 returns 与组匹配的字符串,而是抛出异常。
java.lang.IllegalStateException: No match found
我错过了什么?
如果loading == false
,reg.reset(line).matches()
不会被执行,因为!loading
已经是true
。在您的第一个示例中,然后 "again" 检查是否存在匹配项,然后才尝试获取该组。在你的第二个例子中,你只是假设有一场比赛因为你到了那里,这可能不是真的。
如果您发布的代码就是您在此 if
语句中所做的全部,您可以去掉 !loading
检查,因为它是真还是假都没有关系 - 因为一旦找到匹配,就会执行正文中的代码,如果找不到匹配,则不会执行。