Существует ли способ избавиться от диакритических знаков и преобразовать целую строку в регулярные буквы?

Есть ли лучший путь к тому, чтобы избавиться от диакритических знаков и сделать те буквы регулярными кроме использования String.replaceAll() метод и заменяющие буквы один за другим? Пример:

Вход: orčpžsíáýd

Вывод: orcpzsiayd

Это не должно включать все буквы с диакритическими знаками как российский алфавит или китайский.

234
задан Erick Robertson 12 October 2014 в 04:46
поделиться

2 ответа

Используйте 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 за отличное руководство по юникоду.

362
ответ дан 23 November 2019 в 03:29
поделиться

В зависимости от языка, это могут быть не ударения (которые изменяют звучание буквы), а диакритические знаки

https://en.wikipedia. org/wiki/Diacritic#Languages_with_letters_containing_diacritics

"В боснийском и хорватском языках есть символы č, ć, đ, š и ž, которые считаются отдельными буквами и указываются как таковые в словарях и других контекстах, в которых слова перечисляются в алфавитном порядке."

Удаление их может по своей сути изменить значение слова, или заменить буквы на совершенно другие.

6
ответ дан 23 November 2019 в 03:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: