如何使用 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"));
这使用货币模式占位符 ¤
。
我尝试了以下代码示例,但没有成功,
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"));
这使用货币模式占位符 ¤
。