Java Matcher无法正常工作

时间:2017-01-27 17:51:22

标签: java regex pattern-matching

我有这个功能:

Boolean rhyme(String words) {
  Pattern pattern = Pattern.compile("...");
  Matcher matcher = pattern.matcher(words);
  matcher.matches();
  return matcher.group(1).equals(matcher.group(2));
}

其中String words包含由\t分隔的两个单词,如:read\tdead。 该函数应该检查每个单词的最后三个字母是否相等,如果是,则返回true,否则返回false

我无法更改任何代码,我只是想创建正则表达式,以便此函数有效。

我当前的表达式为(.{3}?)(?=[\t])|(.{3}$),当我将其插入regex101时,它似乎有效。当我在函数中使用该表达式时,出现java.lang.IllegalStateException: No match found错误。任何人都可以帮我弄清楚我哪里出错了,记住,我不能改变除模式表达式之外的任何代码。

1 个答案:

答案 0 :(得分:2)

遗憾的是,代码存在缺陷。需要更改更多才能使其工作,因为如果没有匹配(即,单词不以相同的3个字母结尾),则matcher.matches()将返回false。继续下一个语句将始终抛出异常,因为没有匹配,因此没有要访问的组。

工作示例(使用经过调整的正则表达式):

boolean rhyme(String words) {
   Pattern pattern = Pattern.compile(".*(.{3})(?=[\\t]).*(.{3}$)");
   Matcher matcher = pattern.matcher(words);

   return matcher.matches() && matcher.group(1).equals(matcher.group(2));
}