ホームページ >Java >&#&チュートリアル >Java で記号とアクセント文字を英語のアルファベットに変換するにはどうすればよいですか?

Java で記号とアクセント文字を英語のアルファベットに変換するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-10 06:05:03574ブラウズ

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

Java を使用して記号とアクセント文字を英語のアルファベットに変換する

問題:

多数Unicode 表の文字は英語のアルファベットの文字に似ていますが、バリエーションや違いがある場合があります。アクセント。これらの文字を英語の対応する文字に変換するのは困難です。たとえば、文字「A」には 20 を超える異なる Unicode バリエーションがあります。

解決策:

これらの文字を Java で変換するには、次の手順に従います:

  1. 文字列を正規化します: Normalizer クラスを使用して文字列を正規化します。標準形式分解 (NFD) 形式。この手順では、アクセント付き文字を基本文字と結合発音記号に分解します。
  2. 発音記号の削除: 正規表現を使用して、正規化された文字列から結合発音記号を削除します。これらの発音記号は、基本文字の発音や外観を変更する Unicode 文字です。
  3. 類似の文字を置換: Unicode 文字と対応する英語のアルファベット間のマッピングを作成します。正規化された文字列の文字を、マップされた同等の文字に置き換えます。

アルゴリズムの Java 実装は次のとおりです:

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

使用例:

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

以上がJava で記号とアクセント文字を英語のアルファベットに変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。