Я думаю, что лучшее, что вы можете сделать, это использовать нормализатор, который разбивает символы Юникод с акцентами на два отдельных символа. 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)
, но вы должны проверить различные доступные формы, чтобы увидеть, подходит ли одна для ваших нужд.
РЕДАКТИРОВАТЬ: если вам просто нужны базовые поддержки акцента (например, просто é é à ò ì ù), вы можете просто использовать опцию oedo, если вам нужна полная поддержка всех существующих акцентов, это было бы сумасшествием жестко закодировать их все ..