为什么下面的代码工作正常
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条件下调用了匹配项。期望是它返回与组匹配的字符串,而是抛出异常。
java.lang.IllegalStateException: No match found
我错过了什么?
答案 0 :(得分:2)
如果loading == false
,reg.reset(line).matches()
将无法执行,因为!loading
已经是true
。在您的第一个示例中,您“再次”检查是否存在匹配,然后尝试获取该组。在你的第二个例子中,你只是假设有一个匹配,因为你到达那里,这可能不是真的。
如果您发布的代码就是您在此if
语句中所做的全部内容,那么您可以尽快删除!loading
检查,因为它无论是真还是假都无关紧要你找到了一个匹配项,你将在正文中执行代码,如果你找不到匹配项,它就不会被执行。