Есть ли лучший путь к тому, чтобы избавиться от диакритических знаков и сделать те буквы регулярными кроме использования String.replaceAll()
метод и заменяющие буквы один за другим? Пример:
Вход: orčpžsíáýd
Вывод: orcpzsiayd
Это не должно включать все буквы с диакритическими знаками как российский алфавит или китайский.
Используйте java.text.Normalizer
, чтобы сделать это за вас.
string = Normalizer.normalize(string, Normalizer.Form.NFD);
// or Normalizer.Form.NFKD for a more "compatable" deconstruction
Это позволит отделить все знаки ударения от символов. Затем вам просто нужно сравнить каждый символ с буквой и отбросить те, которые не являются буквами.
string = string.replaceAll("[^\\p{ASCII}]", "");
Если ваш текст в Юникоде, вы должны использовать это вместо:
string = string.replaceAll("\\p{M}", "");
Для Юникода, \\ P {M}
соответствует базовому глифу и \\ p {M}
(нижний регистр) соответствует каждому диакритическому знаку.
Спасибо Гаррету Вильсону за указатель и regular-expressions.info за отличное руководство по юникоду.
В зависимости от языка, это могут быть не ударения (которые изменяют звучание буквы), а диакритические знаки
https://en.wikipedia. org/wiki/Diacritic#Languages_with_letters_containing_diacritics
"В боснийском и хорватском языках есть символы č, ć, đ, š и ž, которые считаются отдельными буквами и указываются как таковые в словарях и других контекстах, в которых слова перечисляются в алфавитном порядке."
Удаление их может по своей сути изменить значение слова, или заменить буквы на совершенно другие.