Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Вопрос по регулярным выражениям в Java

Павел Мартышевский Ученик (127), на голосовании 1 год назад
Задача следующая: определить, является ли строка палиндромом. При определении "палиндромности" строки должны учитываться только буквы и цифры. А пробелы, знаки препинания, а также регистр символов должны игнорироваться. Задачу нужно решить с использованием регулярных выражений, но без объектов классов Pattern и Matcher.
Вопрос следующий: почему при выполнении кода метод возвращает false?
String name = "Was it a cat I saw";
boolean is = name.matches("[^a-zA-Z0-9]");
return is;
Голосование за лучший ответ
Оракул Оракул (62095) 1 год назад
О, привет. Давно молчишь.

Потому что твоя регулярка проверяет, что строка содержит один символ - не букву и не цифру
Для таких строк дает true
 "-".matches("[^a-zA-Z0-9]")
"!".matches("[^a-zA-Z0-9]")
"?".matches("[^a-zA-Z0-9]")
А для твоей строки такая даст true, только в этом смысла нет
 "Was it a cat I saw".matches("[a-zA-Z0-9\\s]+") 
Проверять регуляркой палиндромность да еще и универсального любого числобуквенного выражения невозможно..
Надо просто убрать все знаки препинания регуляркой, перевернуть то, что получилось и сравнить.
replaceAll принимает регулярку
Похожие вопросы