Как знать, содержит ли строка диакритические знаки

Как знать, содержит ли строка диакритические знаки?

8
задан tchrist 11 April 2015 в 00:20
поделиться

2 ответа

if (Pattern.matches(".*[éèàù].*", input)) {
  ....
}

добавьте в этот список любые акценты, которые вы хотите

5
ответ дан 5 December 2019 в 07:10
поделиться

Я думаю, лучшее, что вы можете сделать, это использовать нормализатор, который разделяет символы юникода с ударениями на два отдельных символа. 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, если вам нужна полная поддержка всех существующих ударений, было бы безумием переписывать их все...

13
ответ дан 5 December 2019 в 07:10
поделиться
Другие вопросы по тегам:

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