问题
Possible Duplicate:
Convert String to another locale in java
I want to convert a java
String
that contains english numbers to arabic one's so i make this
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() );
the out put
Number in English : 13240453
Number In Arabic : ١٣٢٤٠٤٥٣
is there another more efficient way to do this ?
回答1:
This gives a 5x speedup over your version with a string of length 3036. This also checks to make sure you're only changing digits. It's about a 6x speedup without the if/else check.
Please pardon me if the characters are incorrect/misplaced. I had to find some of them from another source.
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:
There are a couple of Java classes that you can utilize to accomplish this in a high level fashion without explicit assumptions on Unicode table structure. For example you can check out DecimalFormatSymbols. However the idea will be the same as the code sample you've provided. The locale conversion methods or classes in Java library will only render the way numbers are displayed, they do not convert numeral symbols in a trivial way.
来源:https://stackoverflow.com/questions/11469058/best-way-to-convert-english-numbers-to-arabic