NumberFormatException when parsing Hindi numbers

后端 未结 5 1851
走了就别回头了
走了就别回头了 2021-01-25 05:33

I have an android application and today I have got a crash report which contains this: \"NumberFormatException\"

Th

相关标签:
5条回答
  • 2021-01-25 05:56

    Regex

    Using regex would be better if you want to match any unicode digits.The regex would be \\p{N}+ and here's how to use it:

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

    Locale

    To answer your question you should use NumberFormat as mentioned in docs. Specify a Locale for NumberFormat.

    NumberFormat nf = NumberFormat.getInstance(new Locale("hi", "IN"));
    nf.parse(input);
    
    0 讨论(0)
  • 2021-01-25 05:56

    Try this. This will remove non numeric characters.

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

    If you are dealing with double(with decimal places). you can try this

        String text = "123.0114cc";
        String numOnly = text.replaceAll("\\p{Alpha}","");
        double numVal = Double.valueOf(numOnly);
        System.out.println(numVal);
    
    0 讨论(0)
  • 2021-01-25 06:03

    You can use Character.getNumericValue(char).

    The good thing about this method is that it can do what you need.

    But to work in valid you should implement in your application support for local.

    NumberFormat format = NumberFormat.getInstance(new Locale("hin","IND"));
    
    Number parse = format.parse("१");
    
    System.out.println(parse);
    

    Prints 1.

    0 讨论(0)
  • 2021-01-25 06:05

    You can use the following method which receives a string and converts every Indian digit inside it to Arabic.

    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;
    }
    
    0 讨论(0)
  • 2021-01-25 06:10

    Use

     BigDecimal bigDecimal = new BigDecimal(YOUR_VALUE);
    

    before applying the regex, as the BigDecimal supports 12 integers, 12.35 decimal, and 12 $ currency, 12% percentage and its localized value.

    0 讨论(0)
提交回复
热议问题