Java. Проигнорируйте диакритические знаки при сравнении строк

Проблема это легко. Есть ли какая-либо функция в JAVA, чтобы сравнить две Строки и возвратить истинное игнорирование символов с диакритическим знаком?

т.е.

String x = "Joao";
String y = "João";

возвратитесь, которые равны.

Спасибо

54
задан framara 3 March 2010 в 06:54
поделиться

3 ответа

Я думаю, вам следует использовать класс Collator . Он позволяет вам установить силу и языковой стандарт, и он будет соответствующим образом сравнивать символы.

Из Java 1.6 API:

Вы можете установить свойство силы подборщика, чтобы определить уровень различия, считающийся значительным при сравнениях. Доступны четыре сильных стороны : ПЕРВИЧНАЯ, ВТОРИЧНАЯ, ТРЕТЬЯ и ИДЕНТИЧНАЯ. Точное назначение сильных сторон языковым функциям зависит от локали. Например, в чешском языке "e" и "f" считаются первичными различиями, а "e" и "ě" - вторичными различиями, «e» и «E» являются третичными различиями , а «e» и «e» идентичны.

Я думаю, что важным моментом здесь (который люди пытаются сделать) является то, что "Joao" и "João" никогда не следует рассматривать как равные, но если вы выполняете сортировку, вы не хотите, чтобы их сравнивали на основе их значение ASCII, потому что тогда у вас будет что-то вроде Joao, John, João, что нехорошо. Использование класса сопоставителя определенно справляется с этим правильно.

65
ответ дан 7 November 2019 в 07:57
поделиться

Вы не слышали этого от меня (потому что я не согласен с предпосылкой вопроса), но вы можете использовать java.text.Normalizer и нормализовать с помощью NFD : это отделяет акцент от буквы, к которой он прикреплен. Затем вы можете отфильтровать акцентные символы и сравнить.

24
ответ дан 7 November 2019 в 07:57
поделиться

Проблема с такого рода преобразованиями заключается в том, что не всегда существует четкое отображение символов с диакритическими знаками в символы без диакритических знаков. Это зависит от кодовых страниц, локализаций и т. Д. Например, является ли это a с акцентом эквивалентом "a"? Не проблема для человека, но для компьютера сложнее.

AFAIK Java не имеет встроенного преобразования, которое может искать текущие параметры локализации и выполнять такого рода преобразования. Вам может понадобиться какая-то внешняя библиотека, которая лучше обрабатывает Юникод, например ICU ( http://site.icu-project.org/ )

-1
ответ дан 7 November 2019 в 07:57
поделиться
Другие вопросы по тегам:

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