Java正则表达式未编译 - 无匹配可用错误

时间:2017-06-13 22:09:36

标签: java regex

我一直在研究这个项目,它需要将文件转换为字符串,然后在字符串中查找某些字符串的位置。我正在尝试使用Pattern和Matcher类来执行此操作。请看下面的代码(java):

String begin = "TOSS-UP" + "\\s*" + j;
String end = "TOSS-UP" + "\\s*" + (j+1);
Pattern beginPattern = Pattern.compile(begin);
Pattern endPattern = Pattern.compile(end);
System.out.println(beginPattern);
Matcher beginMatcher = beginPattern.matcher(input);
Matcher endMatcher = endPattern.matcher(input);
int beginPosition = beginMatcher.start();
int endPosition = endMatcher.start();

其中j是for循环中的变量(从1开始并最多可达24)并且输入是一个以这样开头的字符串:

ROUND 1 TOSS-UP 1)...... TOSS-UP 2)...... TOSS-UP 3)...... TOSS-UP 4)......

我需要使用正则表达式,因为每次经常这个字符串在TOSS-UP和数字之间都有\ n(而不是简单的空格)。

我是正则表达式的新手,试图了解我可以通过互联网上的示例,我无法理解为什么这个程序无法编译。日食给我的错误是:

Exception in thread "main" java.lang.IllegalStateException: No match available 
at java.util.regex.Matcher.start 
at Driver.main

任何帮助修复正则表达式将不胜感激。如果其他人有另一个问题的解决方案,请告诉我。谢谢!

1 个答案:

答案 0 :(得分:1)

在尝试从匹配器对象获取任何内容之前,先调用matches()函数。调用matches()将触发匹配,并根据是否存在匹配返回布尔值。

... // as usual
int beginPosition = -1;
int endPosition = -1;
if(beginMatcher.matches()) {
     beginPosition = beginMatcher.start();
} 

if(endMatcher.matches()) {
    endPosition = endMatcher.start();
}

正如@MikeSamuel在评论中指出的那样,如果你只想要第一场比赛,或许.find()会更好。另外,请考虑在正则表达式的末尾添加\b,以便在TOSS-UP 1中找不到TOSS-UP 10