Подтвердить что ты не робот

Лучший способ конвертировать английские номера на арабский

Возможный дубликат:
Преобразование String в другую локаль в 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() );

out put

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

есть ли еще более эффективный способ сделать это?

4b9b3361

Ответ 1

Это дает 5-кратное ускорение по вашей версии с длиной 3036. Это также проверяет, чтобы вы только меняли цифры. Это примерно 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 будут отображаться только так, как отображаются числа, они не преобразуют числовые символы тривиально.