解析印地语数字时的NumberFormatException

时间:2013-07-16 14:49:50

标签: java android

我有一个Android应用程序,今天我有一个崩溃报告,其中包含: NumberFormatException

当应用程序尝试解析用户提供的字符串编号时,会触发此异常。

很明显,问题是应用程序无法解析印地语数字!那么,我该如何解决这个问题?

5 个答案:

答案 0 :(得分:4)

的正则表达式

如果你想匹配任何unicode数字,使用正则表达式会更好。正则表达式将是\\p{N}+,以下是如何使用它:

Matcher m=Pattern.compile("\\p{N}+").matcher(input);
if(m.find())
{
    System.out.println(m.group());
}

区域设置

要回答您的问题,请使用NumberFormat中提到的docs。为Locale指定NumberFormat

NumberFormat nf = NumberFormat.getInstance(new Locale("hi", "IN"));
nf.parse(input);

答案 1 :(得分:2)

您可以使用Character.getNumericValue(char)

这种方法的好处是它可以做你需要的。

但是为了有效工作,你应该在你的应用程序中实现对本地的支持。

NumberFormat format = NumberFormat.getInstance(new Locale("hin","IND"));

Number parse = format.parse("१");

System.out.println(parse);

打印1

答案 2 :(得分:0)

试试这个。这将删除非数字字符。

  Pattern p = Pattern.compile("(\\d+)"); 
  Matcher m = p.matcher(str); // str is input String
  while(m.find()) {
    System.out.println(m.group(1));
  }

如果您正在处理double(带小数位)。你可以试试这个

    String text = "123.0114cc";
    String numOnly = text.replaceAll("\\p{Alpha}","");
    double numVal = Double.valueOf(numOnly);
    System.out.println(numVal);

答案 3 :(得分:0)

使用

 BigDecimal bigDecimal = new BigDecimal(YOUR_VALUE);

在应用正则表达式之前,因为BigDecimal支持12个整数,12.35十进制和12 $货币,12%百分比及其本地化值。

答案 4 :(得分:0)

您可以使用以下方法接收字符串并将其中的每个印度数字转换为阿拉伯语。

public static String convertAllIndianToArabic(String str)
{
    for(int i=0; i<str.length(); i++)
    {
        if(str.charAt(i)=='٠')
            str = str.substring(0, i)+"0"+str.substring(i+1);
        else if(str.charAt(i)=='١')
            str = str.substring(0, i)+"1"+str.substring(i+1);
        else if(str.charAt(i)=='٢')
            str = str.substring(0, i)+"2"+str.substring(i+1);
        else if(str.charAt(i)=='٣')
            str = str.substring(0, i)+"3"+str.substring(i+1);
        else if(str.charAt(i)=='٤')
            str = str.substring(0, i)+"4"+str.substring(i+1);
        else if(str.charAt(i)=='٥')
            str = str.substring(0, i)+"5"+str.substring(i+1);
        else if(str.charAt(i)=='٦')
            str = str.substring(0, i)+"6"+str.substring(i+1);
        else if(str.charAt(i)=='٧')
            str = str.substring(0, i)+"7"+str.substring(i+1);
        else if(str.charAt(i)=='٨')
            str = str.substring(0, i)+"8"+str.substring(i+1);
        else if(str.charAt(i)=='٩')
            str = str.substring(0, i)+"9"+str.substring(i+1);

    }

    return str;
}