Maison  >  Article  >  Java  >  Comment convertir des symboles et des lettres d'accentuation en alphabet anglais avec Java ?

Comment convertir des symboles et des lettres d'accentuation en alphabet anglais avec Java ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-10 06:05:03543parcourir

How to Convert Symbols and Accent Letters to the English Alphabet with Java?

Conversion de symboles et de lettres d'accentuation en alphabet anglais avec Java

Problème :

Beaucoup les caractères du graphique Unicode ressemblent aux lettres de l'alphabet anglais mais peuvent présenter des variations ou des accents. La conversion de ces caractères en leurs homologues anglais est un défi. Par exemple, la lettre « A » comporte plus de 20 variantes Unicode différentes.

Solution :

Pour convertir ces caractères en Java, suivez ces étapes :

  1. Normaliser la chaîne : Utilisez la classe Normalizer pour normaliser la chaîne en utilisant la forme normale décomposée (NFD). Cette étape décompose les caractères accentués en leur caractère de base et en combinant les signes diacritiques.
  2. Supprimer les signes diacritiques : Utilisez une expression régulière pour supprimer les signes diacritiques combinés de la chaîne normalisée. Ces signes diacritiques sont des caractères Unicode qui modifient la prononciation ou l'apparence du caractère de base.
  3. Remplacer les caractères similaires : Créez un mappage entre les caractères Unicode et leurs homologues de l'alphabet anglais. Remplacez les caractères de la chaîne normalisée par leurs équivalents mappés.

Voici une implémentation Java de l'algorithme :

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

public class UnicodeToEnglishConverter {

    private static final Map<String, String> unicodeToEnglishMap = new HashMap<>();

    static {
        // Initialize the mapping
        unicodeToEnglishMap.put("ҥ", "H");
        unicodeToEnglishMap.put("Ѷ", "V");
        unicodeToEnglishMap.put("Ȳ", "Y");
        unicodeToEnglishMap.put("Ǭ", "O");
        unicodeToEnglishMap.put("Ƈ", "C");
    }

    public static String convert(String unicodeString) {
        // Normalize the string in NFD form
        String nfdNormalizedString = Normalizer.normalize(unicodeString, Normalizer.Form.NFD);
        
        // Remove diacritics
        Pattern pattern = Pattern.compile("\p{InCombiningDiacriticalMarks}+");
        String deaccentedString = pattern.matcher(nfdNormalizedString).replaceAll("");
        
        // Replace similar characters with English equivalents
        StringBuilder englishString = new StringBuilder();
        for (char c : deaccentedString.toCharArray()) {
            englishString.append(unicodeToEnglishMap.getOrDefault(String.valueOf(c), String.valueOf(c)));
        }
        
        return englishString.toString();
    }
}

Exemple d'utilisation :

String unicodeString = "tђє Ŧค๓เℓy";
String englishString = UnicodeToEnglishConverter.convert(unicodeString);
System.out.println(englishString); // Output: the Family

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