Проблема это легко. Есть ли какая-либо функция в JAVA, чтобы сравнить две Строки и возвратить истинное игнорирование символов с диакритическим знаком?
т.е.
String x = "Joao";
String y = "João";
возвратитесь, которые равны.
Спасибо
Я думаю, вам следует использовать класс Collator . Он позволяет вам установить силу и языковой стандарт, и он будет соответствующим образом сравнивать символы.
Из Java 1.6 API:
Вы можете установить свойство силы подборщика, чтобы определить уровень различия, считающийся значительным при сравнениях. Доступны четыре сильных стороны : ПЕРВИЧНАЯ, ВТОРИЧНАЯ, ТРЕТЬЯ и ИДЕНТИЧНАЯ. Точное назначение сильных сторон языковым функциям зависит от локали. Например, в чешском языке "e" и "f" считаются первичными различиями, а "e" и "ě" - вторичными различиями, «e» и «E» являются третичными различиями , а «e» и «e» идентичны.
Я думаю, что важным моментом здесь (который люди пытаются сделать) является то, что "Joao" и "João" никогда не следует рассматривать как равные, но если вы выполняете сортировку, вы не хотите, чтобы их сравнивали на основе их значение ASCII, потому что тогда у вас будет что-то вроде Joao, John, João, что нехорошо. Использование класса сопоставителя определенно справляется с этим правильно.
Вы не слышали этого от меня (потому что я не согласен с предпосылкой вопроса), но вы можете использовать java.text.Normalizer
и нормализовать с помощью NFD
: это отделяет акцент от буквы, к которой он прикреплен. Затем вы можете отфильтровать акцентные символы и сравнить.
Проблема с такого рода преобразованиями заключается в том, что не всегда существует четкое отображение символов с диакритическими знаками в символы без диакритических знаков. Это зависит от кодовых страниц, локализаций и т. Д. Например, является ли это a с акцентом эквивалентом "a"? Не проблема для человека, но для компьютера сложнее.
AFAIK Java не имеет встроенного преобразования, которое может искать текущие параметры локализации и выполнять такого рода преобразования. Вам может понадобиться какая-то внешняя библиотека, которая лучше обрабатывает Юникод, например ICU ( http://site.icu-project.org/ )