Лучший способ конвертировать английские номера на арабский
Возможный дубликат:
Преобразование 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 : ١٣٢٤٠٤٥٣
есть ли еще более эффективный способ сделать это?
Ответы
Ответ 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 будут отображаться только так, как отображаются числа, они не преобразуют числовые символы тривиально.