2017-01-27 5 views
0

У меня есть функция:Java Сличитель не работает

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

Видя реальный проблемный код будет полезным. Вы избежали «\» в своем регулярном выражении? –

+0

@JamieBisotti Java зарегистрирует строку как 'read dead', поэтому мне не нужно будет скрывать '\'. Плюс я пробовал это в любом случае – Eduardo

ответ

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)); 
} 
+0

Ограничения для 'words'' 7 ≤ words.length ≤ 1000' – Eduardo

+0

Итак, у каждого слова всегда будет 3 или более буквы – Eduardo

+0

Ваше выражение прекрасно работает. не могли бы вы объяснить, как мои не работают по сравнению с вашими? – Eduardo

Смежные вопросы