21

重複の可能性:
文字列をJavaの別のロケールに変換する

java String英語の数字を含むをアラビア語の数字に変換したいので、これを作成します

int  arabic_zero_unicode= 1632;
String str = "13240453";
StringBuilder builder = new StringBuilder();

for(int i =0; i < str.length(); ++i ) {
    builder.append((char)((int)str.charAt(i) - 48+arabic_zero_unicode));
}

System.out.println("Number in English : "+str);
System.out.println("Number In Arabic : "+builder.toString() );

出力

Number in English : 13240453
Number In Arabic : ١٣٢٤٠٤٥٣

これを行う別のより効率的な方法はありますか?

4

2 に答える 2

40

これにより、長さが3036の文字列のバージョンよりも5倍高速化されます。これにより、数字のみを変更していることも確認されます。if/elseチェックなしで約6倍のスピードアップです。

文字が間違っている/置き忘れている場合はご容赦ください。私はそれらのいくつかを別のソースから見つけなければなりませんでした。

char[] arabicChars = {'٠','١','٢','٣','٤','٥','٦','٧','٨','٩'};
StringBuilder builder = new StringBuilder();
for(int i =0;i<str.length();i++)
{
    if(Character.isDigit(str.charAt(i)))
    {
        builder.append(arabicChars[(int)(str.charAt(i))-48]);
    }
    else
    {
        builder.append(str.charAt(i));
    }
}
System.out.println("Number in English : "+str);
System.out.println("Number In Arabic : "+builder.toString() );
于 2012-07-13T11:23:19.673 に答える
1

Unicodeテーブル構造を明示的に想定せずに、これを高レベルで実現するために利用できるJavaクラスがいくつかあります。たとえば、DecimalFormatSymbolsをチェックアウトできます。ただし、アイデアは提供したコードサンプルと同じになります。Javaライブラリのロケール変換メソッドまたはクラスは、数値の表示方法のみをレンダリングし、数字記号を簡単な方法で変換しません。

于 2012-07-13T11:30:36.237 に答える