switch - ingresar un número dígito y mostrar el número en letras en java
La mejor manera de convertir números en inglés a árabe (2)
Posible duplicado:
Convertir cadena a otra localidad en java
Quiero convertir una String
java
que contiene números en inglés a los de árabe, así que hago esto.
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() );
La salida
Number in English : 13240453
Number In Arabic : ١٣٢٤٠٤٥٣
¿Hay otra forma más eficiente de hacer esto?
Esto le da una aceleración de 5x sobre su versión con una cadena de longitud 3036. Esto también verifica para asegurarse de que solo esté cambiando los dígitos. Se trata de una aceleración 6x sin la verificación if / else.
Por favor, perdóneme si los caracteres son incorrectos / están fuera de lugar. Tuve que encontrar algunos de ellos de otra fuente.
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() );
Hay un par de clases de Java que puede utilizar para lograr esto en un nivel alto sin suposiciones explícitas sobre la estructura de la tabla Unicode. Por ejemplo, puedes revisar DecimalFormatSymbols . Sin embargo, la idea será la misma que el ejemplo de código que ha proporcionado. Los métodos o clases de conversión de configuración regional en la biblioteca de Java solo mostrarán la forma en que se muestran los números, no convierten los símbolos numéricos de forma trivial.