integer转成string - java char转int



将String转换为java中的另一个语言环境 (7)

它也适用于小数点..

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

你好
我需要将阿拉伯语/波斯语数字转换为英语相等(例如将“2”转换为“2”)
我怎样才能做到这一点?

谢谢


Answer #1

使用Locale类转换数字。

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

Answer #2

我发现了一种更简单,更快捷的方式,包括两个阿拉伯语代码页。

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”)


Answer #3

我建议你有一个十位数的查找字符串,并一次替换所有数字。

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

版画

42

使用字符串作为查找的原因是其他字符,如. - ,将保持原样。 事实上,十进制数字将保持不变。


Answer #4

我认为最好的方法是将Locale更改为您想要的,例如,
对于双号:

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

for String:

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

或DecimalFormat:

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

Answer #5

我通过java.math.BigDecimal类实现了这个,下面是代码片段

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

注意:如果在arabicNumerals中除了数字之外还有任何字符,则上面的代码将不起作用,例如:4,242.42将导致java.lang.NumberFormatException ,因此您可以使用Character.isDigit(char ch)删除其他Character.isDigit(char ch)在另一个逻辑中使用上面的代码。 所有正常情况都很有效!!

美好的一天


Answer #6

首先让它工作,然后让它看起来不错;-)

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

作品2 ,不幸的是我不知道其他波斯数字,你可以尝试一下吗?

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

编辑 :(基于Peter Lawrey字符串版本,但使用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'));
}




locale