如何使用NumberFormat类在Java中解析“ 1,23 $”并获取123作为数字

时间:2019-11-22 04:45:59

标签: java number-formatting

我尝试了以下代码示例,但是没有用,

NumberFormat.getCurrencyInstance(Locale.US).parse("1,23$")

抛出异常

java.text.ParseException: Unparseable number: "1,23$"

5 个答案:

答案 0 :(得分:2)

    DecimalFormat df = new DecimalFormat();
    DecimalFormatSymbols dfs = new DecimalFormatSymbols();
    dfs.setCurrencySymbol("$");
    dfs.setGroupingSeparator('.');
    dfs.setDecimalSeparator(',');
    df.setDecimalFormatSymbols(dfs);       
    final Number parse = df.parse("1,23$");
    System.out.println(parse);

答案 1 :(得分:1)

似乎您想要

public int getValue(String s) {
    return Integer.parseInt(s.replaceAll("\\p{Punct}", ""));
} 

答案 2 :(得分:1)

您不能同时使用一种数字格式进行检查。如果另一个失败,则需要尝试一个:

DecimalFormat format1 = 
    (DecimalFormat)NumberFormat.getNumberInstance(Locale.US);
format1.applyPattern("##,#0¤");

DecimalFormat format2 = 
    (DecimalFormat)NumberFormat.getNumberInstance(Locale.US);
format2.applyPattern("¤##,#0");

System.out.println(format1.parse("1,23$"));
System.out.println(format2.parse("$1,23"));

这使用货币模式占位符¤

答案 3 :(得分:0)

重新格式化您的字符串。

String s = "1,23$";
s = '$' + s.replaceAll("\\p{Punct}", "");
System.out.println(NumberFormat.getCurrencyInstance(Locale.US).parse(s));

答案 4 :(得分:0)

Number number = NumberFormat.getCurrencyInstance(Locale.US).parse("$1,23");

        System.out.println("Number is "+ number ) ;

输出为

Number is 123

如果您传递值1,23$

Exception in thread "main" java.text.ParseException: Unparseable number: "1,23$"
    at java.text.NumberFormat.parse(NumberFormat.java:385)
    at com.example.polls.PollsApplicationTests.main(PollsApplicationTests.java:18)