Maison >Java >javaDidacticiel >Comment puis-je supprimer efficacement les signes diacritiques des chaînes Unicode en Java ?

Comment puis-je supprimer efficacement les signes diacritiques des chaînes Unicode en Java ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-11 01:23:10549parcourir

How Can I Efficiently Remove Diacritics from Unicode Strings in Java?

Supprimer les signes diacritiques des caractères Unicode

Pour éliminer les signes diacritiques (par exemple, tilde, tréma, etc.) des caractères Unicode, envisagez d'utiliser les algorithmes suivants :

Algorithme Java

En Java, utilisez les éléments suivants code :

public static final Pattern DIACRITICS_AND_FRIENDS = Pattern.compile("[\p{InCombiningDiacriticalMarks}\p{IsLm}\p{IsSk}\u0591-\u05C7]+");

private static String stripDiacritics(String str) {
    str = Normalizer.normalize(str, Normalizer.Form.NFD);
    str = DIACRITICS_AND_FRIENDS.matcher(str).replaceAll("");
    return str;
}

Exemple :

stripDiacritics("Björn")  = Bjorn

Algorithme amélioré

Pour une solution plus complète, incluez une deuxième étape de nettoyage pour gérer les caractères spéciaux non diacritiques.

public static final char DEFAULT_REPLACE_CHAR = '-';
public static final String DEFAULT_REPLACE = String.valueOf(DEFAULT_REPLACE_CHAR);
private static final ImmutableMap<String, String> NONDIACRITICS = ImmutableMap.<String, String>builder()
        // ... [List of non-diacritic characters]

public static String simplifiedString(String orig) {
    String str = orig;
    if (str == null) {
        return null;
    }
    str = stripDiacritics(str);
    str = stripNonDiacritics(str);
    if (str.length() == 0) {
        // ... 
    }
    return str.toLowerCase();
}

// ... [Continued implementation]

Applicabilité et limitations

Ces algorithmes suppriment efficacement signes diacritiques à des fins de recherche. Cependant, les caractères spéciaux non diacritiques, tels que le « ł » de Białegostok, nécessitent une manipulation supplémentaire. L'algorithme amélioré tente de remplacer ces caractères par leur équivalent le plus proche.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn