Поиск строки Java, игнорирующий акценты

Я пытаюсь написать функцию фильтра для моего приложения, которая будет принимать строку ввода и отфильтровать все объекты, которые каким-либо образом не соответствуют данному входу. Самый простой способ сделать это – использовать метод String, т. Е. Просто проверить, содержит ли объект (переменная String в объекте) строку, указанную в фильтре, но это не учитывает акценты.

Объекты, о которых идет речь, в основном являются людьми, а строки, которые я пытаюсь сопоставить, – это имена. Так, например, если кто-то ищет Жоао, я ожидаю, что Joáo будет включен в результирующий набор. Я уже использовал class Collator в своем приложении для сортировки по имени, и он работает хорошо, потому что он может сравнивать, т. Е. Использование британского Locale à происходит до b, но после a. Но obvisouly он не возвращает 0, если вы сравниваете a и á, потому что они не равны.

Так кто-нибудь может понять, как я могу это сделать?

    Используйте java.text.Normalizer и снимок регулярного выражения, чтобы избавиться от диакритики .

     public static String removeDiacriticalMarks(String string) { return Normalizer.normalize(string, Form.NFD) .replaceAll("\\p{InCombiningDiacriticalMarks}+", ""); } 

    Что вы можете использовать следующим образом:

     String value = "Joáo"; String comparisonMaterial = removeDiacriticalMarks(value); // Joao 

    Collator возвращает 0 для a и á, если вы настроите его на игнорирование диакритики:

     public boolean isSame(String a, String b) { Collator insenstiveStringComparator = Collator.getInstance(); insenstiveStringComparator.setStrength(Collator.PRIMARY); // Collator.PRIMARY also works, but is case senstive return insenstiveStringComparator.compare(a, b) == 0; } 

    isSame (“a”, “á”) дает true сейчас

    Я написал class для поиска арабских текстов, игнорируя диакритические (НЕ удаляя их). возможно, вы можете получить идею или использовать ее каким-то образом.

    DiacriticInsensitiveSearch.java

    Давайте будем гением компьютера.