3

私は次のキャラクターを持っています。

Ą¢¥ŚŠŞŤŹŽŻąľśšşťźžżÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëì

に変換する必要があります

AcYSSSTZZZalssstzzzAAAAAAACEEEEIIIIDNOOOOOOUUUUYTSaaaaaaaceeeeiiiionoooooouuuuyty

私はJava1.4を使用しています。

Normalizer.decompose(text、true、0).replaceAll( "\ p {InCombiningDiacriticalMarks} +"、 ""); 文字を発音区別符号に置き換えるだけです。

¢¥ÆÐÞßæðøþのような文字は変換されません。

どうすればそれを行うことができますか、JDK1.4で変換を行うための効率的な方法は何ですか。

助けてください。

よろしく、Sridevi

4

3 に答える 3

7

ICU プロジェクト、特に icu4j の部分を確認してください。クラスはあなたのTransliterator問題を解決します。

Transliteratorこれは、スクリプトをラテン文字に変換し、アクセントと非ASCII文字を削除する例です。

Transliterator accentsConverter = Transliterator.getInstance("Any-Latin; NFD; [:M:] Remove; NFC; [^\\p{ASCII}] Remove");

Any-Latinパーツは変換を実行し、NFD; [:M:] Remove; NFCアクセントを[^\\p{ASCII}] Remove削除し、残りの非 ASCII 文字をすべて削除します。

呼び出すだけaccentsConverter.transliterate(yourString)で結果を取得できます。

変換 ID ( のパラメーターTransliterator.getInstance) を作成する方法について詳しくは、ICU 変換ガイドを参照してください。

于 2012-04-17T09:44:19.037 に答える
3

JDK 1.4で変換を行う効率的な方法は何ですか。

最も効率的な方法は、配列または として実装されたルックアップ テーブルを使用することHashMapです。ただし、もちろん、テーブルにデータを入力する必要があります。

「¥ÆÐÞßæðøþ」のような文字は変換されません。

まあ、これらの文字はどれも実際にはローマ字ではなく、ローマ字に翻訳することはできません...セマンティクスで法外な自由を取らなければ. 例えば:

  • ¢ と ¥ は通貨記号です。
  • Æ と æ は合字で、言語によっては 2 つの文字を表し、他の言語では別個の文字になります。
  • ß は、ダブル s のドイツ語表記です。
于 2012-04-17T09:30:50.217 に答える
2

私はこのようなことをします。

Java 1.4用に更新(ジェネリックスを削除)

public class StringConverter {

    char[] source = new char[]{'Ą', '¢', '¥', 'Ś'}; // all your chars here...
    char[] target = new char[]{'A', 'c', 'Y', 'S'}; // all your chars here...
    //Build a map
    HashMap map;

    public StringConverter() {
        map = new HashMap();
        for (int i = 0; i < source.length; i++) {
            map.put(new Character(source[i]), new Character(target[i]));
        }
    }

    public String convert(String s) {
        char[] chars = s.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            chars[i] = map.get(chars[i]);
        }
        return new String(chars);
    }

}
于 2012-04-17T09:41:30.190 に答える