将英文数字转换为阿拉伯语的最佳方式

时间:2012-07-13 10:53:15

标签: java numbers

  

可能重复:
  Convert String to another locale in 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 : ١٣٢٤٠٤٥٣

还有另一种更有效的方法吗?

2 个答案:

答案 0 :(得分:36)

这比你的版本提供了5倍的加速,字符串长度为3036。 这也会检查以确保您只是更改数字。没有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() );

答案 1 :(得分:1)

您可以使用几个Java类以高级方式实现此目的,而无需对Unicode表结构进行明确假设。例如,您可以查看DecimalFormatSymbols。但是,这个想法与您提供的代码示例相同。 Java库中的语言环境转换方法或类只会呈现数字的显示方式,它们不会以微不足道的方式转换数字符号。