Преобразование String в другую локаль в java

Здравствуй
Мне нужно преобразовать арабские / персидские цифры в английский язык равным (например, преобразовать «2» в «2»)
Как я могу это сделать?

благодаря

Я предлагаю вам иметь десятизначную строку поиска и заменять все цифры по одному.

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= 0x0660 && ch <= 0x0669) ch -= 0x0660 - '0'; else if (ch >= 0x06f0 && ch <= 0x06F9) ch -= 0x06f0 - '0'; chars[i] = ch; } return new String(chars); } 

печать

 42 

Причиной использования строк в качестве поиска является то, что другие символы, такие как . - , остался бы как есть. Фактически десятичное число не изменилось бы.

Я достиг этого java.math.BigDecimal Class, Ниже приведен fragment кода

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

результат

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

NB: вышеуказанный код не будет работать, если в арабском списке есть какие-либо символы, кроме числовых цифр, например: 4,242.42 приведет к java.lang.NumberFormatException , поэтому вы можете удалить другие Character.isDigit(char ch) используя Character.isDigit(char ch) в другой логике и использовать приведенный выше код. Все нормальные случаи работают чудесно!

Хорошего дня

Я нашел более простой и быстрый способ, который также включает в себя две страницы арабского кода.

 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; } 

Он вернет номера в английском формате или наоборот, если вы замените замену.
(«0», «0») до («0», «0»)

Сначала заставьте его работать, а затем сделайте его красивым 😉

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

Работает на 2 , к сожалению, я не знаю других персидских цифр, не могли бы вы попробовать?

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

EDIT : (на основе версии Peter Lawrey String, но использует 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')); } 

Попробуйте этих парней:

 /** * 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 true if the provided language code uses arabic characters; othersise false. * @param lang ISO language code. * @return true if the provided language code uses arabic characters; othersise false */ 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=0 && n < 10 ? ARABIC[n] : ch; } /** * Convert an int into arabic string. */ public static String toString (int num) { return convertDigits( Integer.toString( num ) ); } } 

Кстати, есть разница между арабскими цифрами и урду / фарси: арабский:

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

Урду или фарси:

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

он будет работать с десятичной точкой также ..

 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; } 

отпечатки 87.598

так тривиальный ответ:

 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; } 

а также

 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; } 

Используйте class Locale для преобразования чисел.

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

я думаю, что лучший способ – изменить Locale на то, что вы хотите, например,
для двойного номера:

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

для строки:

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

или DecimalFormat:

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

Я думаю, вместо того, чтобы заменять цифры один за другим (который будет работать только для десятичных чисел), вы должны проанализировать свой номер с персидским NumberFormat на число, а затем (при необходимости) использовать английский NumberFormat для его форматирования.

  • Как отсортировать текст в sqlite3 с указанной локалью?
  • Настройка языковых настроек java
  • Interesting Posts

    Как преобразовать многостраничный файл PDF в PNG-файлы с одним PNG-файлом на страницу документа PDF?

    Угловой UI-маршрутизатор Вложенное разрешение штата в дочерних штатах

    String.replaceВсе одиночная обратная косая черта с двойной обратной косой чертой

    Сильно типизированный ASP.NET MVC с ADO.NET Entity Framework

    Создайте функцию Oracle, которая возвращает таблицу

    Целое число в шестнадцатеричной строке в C ++

    Как в диалоговом окне «Запуск» известно, где находятся приложения?

    XmlSerializer, дающий FileNotFoundException в конструкторе

    Получить версию java из командного файла

    Как перетаскивать и перемещать фигуры в C #

    Каков наилучший способ блокировки кеша в asp.net?

    Как сбросить права доступа к папкам по умолчанию в Ubuntu?

    MS Word: управление приоритетами между стилями таблицы и абзаца

    Как можно исключить исключения Event Dispatch Thread (EDT)?

    Почему XmlSerializer не нуждается в типе, который будет помечен ?

    Давайте будем гением компьютера.