如何将字符串转换为另一个区域设置?

2022-09-01 10:07:51

我需要将阿拉伯/波斯数字转换为其英语相等(例如,将“۲”转换为“2”)

我该怎么做?


答案 1

我建议你有一个十位数的查找字符串,并一次替换一个数字。

public static void main(String... args) {
    System.out.println(arabicToDecimal("۴۲"));
}
//used in Persian apps
private static final String extendedArabic = "\u06f0\u06f1\u06f2\u06f3\u06f4\u06f5\u06f6\u06f7\u06f8\u06f9";

//used in Arabic apps
private static final String arabic = "\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669";

private static String arabicToDecimal(String number) {
    char[] chars = new char[number.length()];
    for(int i=0;i<number.length();i++) {
        char ch = number.charAt(i);
        if (ch >= 0x0660 && ch <= 0x0669)
           ch -= 0x0660 - '0';
        else if (ch >= 0x06f0 && ch <= 0x06F9)
           ch -= 0x06f0 - '0';
        chars[i] = ch;
    }
    return new String(chars);
}

指纹

42

使用字符串作为查找的原因是其他字符(如)将保持原样。事实上,十进制数将保持不变。.-,


答案 2

我通过类获得了这一点,下面是代码片段java.math.BigDecimal

String arabicNumerals = "۴۲۴۲.۴۲";
String englishNumerals = new BigDecimal(arabic).toString();
System.out.println("Number In Arabic : "+arabicNumerals);
System.out.println("Number In English : "+englishNumerals);

结果

Number In Arabic : ۴۲۴۲.۴۲
Number In English : 4242.42

铌:如果阿拉伯语数字中存在除数字以外的任何字符,则上述代码将不起作用,例如:۴,۲۴۲.۴۲ 将产生 ,因此您可以删除其他字符在另一个逻辑中使用并使用上述代码。所有正常情况都在工作。java.lang.NumberFormatExceptionCharacter.isDigit(char ch)


推荐