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

2022-09-02 03:08:48

可能的重复:
在java中将字符串转换为另一个区域设置

我想将一个包含英语数字转换为阿拉伯语的数字,所以我做了这个javaString

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 : ١٣٢٤٠٤٥٣

有没有另一种更有效的方法可以做到这一点?


答案 1

这比字符串长度为 3036 的版本提高了 5 倍。这还会进行检查,以确保您只更改数字。这是一个关于6倍的加速,没有if/else检查。

请原谅我,如果字符不正确/放错位置。我不得不从另一个来源找到其中的一些。

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

答案 2

您可以使用几个 Java 类以高级方式完成此操作,而无需对 Unicode 表结构进行显式假设。例如,您可以查看DecimalFormatSymbols。但是,这个想法将与你提供的代码示例相同。Java 库中的语言环境转换方法或类将仅呈现数字的显示方式,它们不会以简单的方式转换数字符号。