如何使用 NumberFormat class 解析 java 中的“1,23$”并获得 123 作为数字

How to parse "1,23$" in java using NumberFormat class and obtain 123 as number

我尝试了以下代码示例,但没有成功,

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

抛出以下异常

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

重新格式化您的字符串。

String s = "1,23$";
s = '$' + s.replaceAll("\p{Punct}", "");
System.out.println(NumberFormat.getCurrencyInstance(Locale.US).parse(s));
    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);
Number number = NumberFormat.getCurrencyInstance(Locale.US).parse(",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)

看来你想要这个

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

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

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(",23"));

这使用货币模式占位符 ¤