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
Libérer: 2024-12-01 15:36:14
original
243 Les gens l'ont consulté

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("");
    }

}
Copier après la connexion

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();
    }

}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal