我有这个功能:
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
错误。任何人都可以帮我弄清楚我哪里出错了,记住,我不能改变除模式表达式之外的任何代码。
答案 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));
}