Как знать, содержит ли строка диакритические знаки?
if (Pattern.matches(".*[éèàù].*", input)) {
....
}
добавьте в этот список любые акценты, которые вы хотите
Я думаю, лучшее, что вы можете сделать, это использовать нормализатор, который разделяет символы юникода с ударениями на два отдельных символа. Java включает это в класс Normalizer
, смотрите здесь.
Это, например, разделит
U+00C1 LATIN CAPITAL LETTER A WITH ACUTE
на
U+0041 LATIN CAPITAL LETTER A
U+0301 COMBINING ACUTE ACCENT
и сделает это для каждого символа, имеющего ударение или другой диакритический знак (http://en.wikipedia.org/wiki/Diacritic).
Затем вы можете проверить, есть ли в полученном CharSequence
некоторые из знаков ударения (что подразумевает их жесткое кодирование) или просто проверить, равна ли нормализованная версия начальной, что будет означать, что нет ни одного символа, который был разложен. Java Normalizer
уже имеет такую возможность в isNormalized(CharSequence src, Normalizer.Form form form)
, но вы должны проверить различные доступные формы, чтобы увидеть, есть ли среди них подходящая для ваших нужд.
EDIT: если вам нужна только базовая поддержка ударений (например, только è é à ò ì ù), вы можете просто использовать вариант oedo, если вам нужна полная поддержка всех существующих ударений, было бы безумием переписывать их все...