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-01 15:36:14242parcourir

How Can I Efficiently Remove Diacritical Marks from Unicode Strings in Java?

Suppression des signes diacritiques des caractères Unicode

Description du problème

Les signes diacritiques, tels que les tildes, les circonflexes, les carets, les trémas et les carons, peuvent modifier la prononciation des caractères. Pour faciliter une recherche et une comparaison efficaces, il peut être nécessaire de supprimer ces marques et d'obtenir la contrepartie "simple" des caractères.

Solution

Utilisant la normalisation Unicode et les expressions régulières, l'implémentation Java suivante supprime efficacement les signes diacritiques :

import java.text.Normalizer;
import java.util.regex.Pattern;

public class DiacriticStripper {

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

    public static String stripDiacritics(String input) {
        String normalizedInput = Normalizer.normalize(input, Normalizer.Form.NFD);
        return DIACRITICS_PATTERN.matcher(normalizedInput).replaceAll("");
    }

}

Par exemple, la chaîne d'entrée "ńǹňñṅņṇṋṉ̈ɲƞᶇɳȵ" serait transformé en "n".

Simplification étendue des chaînes

La solution fournie traite spécifiquement les signes diacritiques. Si des caractères spéciaux non diacritiques supplémentaires doivent être traités, une méthode de simplification de chaîne plus complète peut être utilisée :

import java.text.Normalizer;
import java.util.regex.Pattern;

public class StringSimplifier {

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

    public static String simplify(String input) {
        String normalizedInput = Normalizer.normalize(input, Normalizer.Form.NFD);
        String diacriticStripped = DIACRITICS_PATTERN.matcher(normalizedInput).replaceAll("");
        // Replace additional non-diacritic special characters using a custom mapping
        // ...
        return simplifiedString.toLowerCase();
    }

}

En considérant une gamme plus large de caractères, cette méthode fournit un processus de simplification de chaîne plus complet.

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