【问题标题】:Locating Illegal State Exception Error定位非法状态异常错误
【发布时间】:2014-08-28 09:29:31
【问题描述】:

我对 java 比较陌生,并且开发了一个程序,它使用多个正则表达式从网页中查找某些值。但是,有时我会遇到以下错误:

 java.lang.IllegalStateException: No match found
        at java.util.regex.Matcher.group(Matcher.java:468)
        at java.util.regex.Matcher.group(Matcher.java:428)

我的代码包含很多正则表达式,我想知道在 Eclipse 中是否有一种方法可以专门找到无法找到的模式。有没有办法找到哪一行代码产生了错误?提前致谢。

【问题讨论】:

  • 在使用group方法之前,你是否在Matcher实例上调用findmatches
  • 是的,我实际上能够解决这个问题。问题是我花了很长时间才解决,因为我在代码中使用了多个模式、匹配器、查找和组。我只是想知道 Eclipse 是否明确说明了我的代码中发生错误的位置。这样我以后就不会花很长时间来解决这个问题了。
  • at java.util.regex.Matcher.group(Matcher.java:428)下方的某个地方,您还应该有类似at your.package.name.YourClass.method(YourClassFile.java:XXX)的东西,其中XXX是文件YourClassFile.java中引发错误的行号。此行应包含yourMatcher.group(),其中yourMatcher 要么没有调用findmatches 方法,要么实际上没有找到任何匹配正则表达式。

标签: java regex eclipse illegalstateexception


【解决方案1】:

在从匹配器中获取组之前进行检查,否则将导致以下异常:

java.lang.IllegalStateException: No match found

示例代码

if(matcher.find()){    // you can use while loop as well if there is more matches
     matcher.group(1);
}

Matcher#group() 方法抛出了什么?

如果尚未尝试匹配,或者之前的匹配操作失败,则出现 IllegalStateException。

Matcher#find() 声明的内容:

尝试查找与模式匹配的输入序列的下一个子序列。

如果匹配成功,则可以通过 start、end 和 group 方法获取更多信息。

【讨论】:

  • 感谢您的回复。我一定会这样做的。但是,eclipse 是否有任何信息可以让我知道错误发生在哪里?当我第一次看到该错误时,我认为这意味着无法找到的正则表达式位于第 468 行。该信息是否存在于任何地方,还是使用检查的常见做法?
  • 查看堆栈跟踪,它会告诉您生成此异常的确切位置。
  • 在致电group() 之前务必检查一下,因为不可能有任何匹配项。这就像在 Java 中调用 next() 而不调用 hasNext() 进行 IO 一样。
  • 哇,感谢您的帮助。我知道我是如何一直错过堆栈跟踪中给出的位置的,一定是工作太快而且太不耐烦了。但是,我仍然很高兴我要求了解支票。谢谢。
猜你喜欢
  • 1970-01-01
  • 2013-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-05
  • 2017-12-06
相关资源
最近更新 更多