valor una qué programa otra imprimir funciones definir copiar con clase caracteristicas cadenas cadena java locale

una - Convertir cadena a otra configuración regional en Java



qué es string en java (10)

también funcionará con punto decimal ...

public class mainsupport { public static void main(String args[]){ // String Numtoconvert="15.3201" ; // String Numtoconvert="458" ; String Numtoconvert="٨٧٫٥٩٨" ; // integer value 87.598 System.out.println(getUSNumber(Numtoconvert)); } private static String getUSNumber(String Numtoconvert){ NumberFormat formatter = NumberFormat.getInstance(Locale.US); try { if(Numtoconvert.contains("٫")) Numtoconvert=formatter.parse(Numtoconvert.split("٫")[0].trim())+"."+formatter.parse(Numtoconvert.split("٫")[1].trim()); else Numtoconvert=formatter.parse(Numtoconvert).toString(); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } return Numtoconvert; }

impresiones 87.598

Hola
Necesito convertir los números árabes / persas a su inglés igual (por ejemplo, convertir "2" a "2")
¿Cómo puedo hacer esto?

Gracias


Creo que en lugar de reemplazar los dígitos uno por uno (que solo funcionaría para los números decimales), debe analizar su número con un NumberFormat en persa a un número, y luego (si es necesario) usar un NumberFormat en inglés para formatearlo de nuevo.


Creo que la mejor manera es cambiar la configuración regional a lo que quiere, por ejemplo,
para el doble número:

NumberFormat fmt = NumberFormat.getNumberInstance(Locale.US); d = Double.parseDouble(s);

para Cadena:

NumberFormat.getNumberInstance(Locale.US).format(s);

o DecimalFormat:

double num; DecimalFormat df = new DecimalFormat("###.###"); df.setDecimalFormatSymbols(new DecimalFormatSymbols(Locale.US)); String s = df.format(num);


Encontré una manera más simple y más rápida que incluye las dos páginas de códigos árabes también.

public static String convertToEnglishDigits(String value) { String newValue = value.replace("١", "1").replace("٢", "2").replace("٣", "3").replace("٤", "4").replace("٥", "5") .replace("٦", "6").replace("7", "٧").replace("٨", "8").replace("٩", "9").replace("٠", "0") .replace("۱", "1").replace("۲", "2").replace("۳", "3").replace("۴", "4").replace("۵", "5") .replace("۶", "6").replace("۷", "7").replace("۸", "8").replace("۹", "9").replace("۰", "0"); return newValue; }

Devolverá los números en formato inglés o viceversa si cambia el reemplazo de.
("0", "0") a ("0", "0")


Primero haz que funcione, luego haz que se vea bien ;-)

public static char persianDigitToEnglish(char persianDigit) { return (char) (((int)persianDigit) - ((int)''۲'' - (int)''2'')); }

Funciona para 2 , lamentablemente no conozco otros dígitos persas, ¿podría intentarlo?

assertThat(persianDigitToEnglish(''۲'')).isEqualTo(''2'');

EDITAR : (basado en la versión de Peter Lawrey String, pero usa StringBuilder )

public static String persianDigitToEnglish(String persianNumber) { StringBuilder chars = new StringBuilder(persianNumber.length()); for (int i = 0; i < persianNumber.length(); i++) chars.append(persianDigitToEnglish(persianNumber.charAt(i))); return chars.toString(); } private static char persianDigitToEnglish(char persianDigit) { return (char) (((int)persianDigit) - ((int)''۲'' - (int)''2'')); }


Prueba esto chicos:

/** * Utility class to detect arabic languages and convert numbers into arabic digits. * * @author Ahmed Shakil * @date 09-24-2012 */ public final class ArabicUtil { private static final char[] DIGITS = {''/u0660'',''/u0661'',''/u0662'',''/u0663'',''/u0664'',''/u0665'',''/u0666'',''/u0667'',''/u0668'',''/u0669''}; /** * Returns <code>true</code> if the provided language code uses arabic characters; othersise <code>false</code>. * @param lang ISO language code. * @return <code>true</code> if the provided language code uses arabic characters; othersise <code>false</code> */ public static boolean isArabic (String lang) { return "ar".equals(lang) || "fa".equals(lang) || "ur".equals(lang); } /** * Convert digits in the specified string to arabic digits. */ public static String convertDigits (String str) { if (str == null || str.length() == 0) return str; char[] s = new char[str.length()]; for(int i =0;i<s.length;i++) s[i] = toDigit( str.charAt( i ) ); return new String(s); } /** * Convert single digit in the specified string to arabic digit. */ public static char toDigit (char ch) { int n = Character.getNumericValue( (int)ch ); return n >=0 && n < 10 ? ARABIC[n] : ch; } /** * Convert an int into arabic string. */ public static String toString (int num) { return convertDigits( Integer.toString( num ) ); } }

Por cierto, hay una diferencia entre los dígitos árabes vs. urdu / farsi: Árabe:

private static final char[] ARABIC = {''/u0660'', ''/u0661'', ''/u0662'', ''/u0663'', ''/u0664'', ''/u0665'', ''/u0666'', ''/u0667'', ''/u0668'', ''/u0669''};

Urdu o Farsi:

private static final char[] URDU_FARSI = {''/u06f0'', ''/u06f1'', ''/u06f2'', ''/u06f3'', ''/u06f4'', ''/u06f5'', ''/u06f6'', ''/u06f7'', ''/u06f8'', ''/u06f9''};


Sugiero que tengas una cadena de búsqueda de diez dígitos y reemplaces todos los dígitos de a uno por vez.

public static void main(String... args) { System.out.println(arabicToDecimal("۴۲")); } private static final String arabic = "/u06f0/u06f1/u06f2/u06f3/u06f4/u06f5/u06f6/u06f7/u06f8/u06f9"; 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); }

huellas dactilares

42

La razón para usar las cadenas como una búsqueda es que otros personajes como . - , se quedaría como está. De hecho, un número decimal no se modificaría.


Usa la clase Locale para convertir números.

Locale locale = new Locale("ar"); String formattedArabic = format(locale, "%d", value));


respuesta tan trivial:

public static String convertNumbersToPersian(String str) { String answer = str; answer = answer.replace("1","١"); answer = answer.replace("2","٢"); answer = answer.replace("3","٣"); answer = answer.replace("4","٤"); answer = answer.replace("5","٥"); answer = answer.replace("6","٦"); answer = answer.replace("7","٧"); answer = answer.replace("8","٨"); answer = answer.replace("9","٩"); answer = answer.replace("0","٠"); return answer; }

y

public static String convertNumbersToEnglish(String str) { String answer = str; answer = answer.replace("١", "1"); answer = answer.replace("٢", "2"); answer = answer.replace("٣", "3"); answer = answer.replace("٤", "4"); answer = answer.replace("٥", "5"); answer = answer.replace("٦", "6"); answer = answer.replace("٧", "7"); answer = answer.replace("٨", "8"); answer = answer.replace("٩", "9"); answer = answer.replace("٠", "0"); return answer; }


java.math.BigDecimal esto mediante la clase java.math.BigDecimal , a continuación se muestra el fragmento de código

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

Resultado

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

NB: El código anterior no funcionará si hay otros caracteres que no sean dígitos numéricos en árabeNumerales, por ejemplo: 4,242.42 dará como resultado java.lang.NumberFormatException , por lo que puede eliminar otros Character.isDigit(char ch) utilizando Character.isDigit(char ch) en otra lógica y use el código anterior. ¡Todos los casos normales funcionan con encanto!

Buen día