【发布时间】:2011-05-18 10:32:43
【问题描述】:
由于comma 用作decimal separator,此代码抛出NumberFormatException:
String p="1,234";
Double d=Double.valueOf(p);
System.out.println(d);
有没有比p = p.replaceAll(",","."); 更好的方法来解析"1,234" 以获得1.234?
【问题讨论】:
-
根据我的经验,按照您的建议,replaceAll() 是最好的方法。它不依赖于当前的语言环境,它很简单,而且很有效。
-
@Marco Altieri:
replaceAll(",",".")用点替换所有逗号。如果没有逗号,那么它什么也不做。Double.valueOf()(仅)适用于使用点作为小数分隔符的字符串。当前默认语言环境不影响此处的任何内容。 docs.oracle.com/javase/8/docs/api/java/lang/… -
replaceAll(",",".")的唯一问题是它只有在有一个逗号时才有效:即:1,234,567 将抛出java.lang.NumberFormatException: multiple points。具有正向前瞻的正则表达式就足够了p.replaceAll(",(?=[0-9]+,)", "").replaceAll(",", ".")更多信息:regular-expressions.info/lookaround.html -
没有问题。 NumberFormatException 很好。你怎么知道哪个逗号是正确的?格式错误,您所能做的就是向用户显示比异常更易读的消息。
-
@TheincredibleJan 不,格式没有错。某些语言环境使用逗号作为千位分隔符,因此您可以在一个数字中包含多个逗号,并且从技术上讲它仍然是有效的输入。
标签: java