【发布时间】:2010-11-12 21:54:04
【问题描述】:
如果传递的字符串是有效数字(例如“123.55e-9”、“-333,556”),我正在寻找一种返回布尔值的方法。我不想只想做:
public boolean isANumber(String s) {
try {
BigDecimal a = new BigDecimal(s);
return true;
} catch (NumberFormatException e) {
return false;
}
}
显然,该函数应该使用状态机 (DFA) 来解析字符串,以确保无效示例不会欺骗它(例如“-21,22.22.2”、“33-2”)。你知道是否存在这样的图书馆吗?我真的不想自己写,因为这是一个显而易见的问题,我敢肯定我会重新发明轮子。
谢谢,
尼克
【问题讨论】:
-
为什么你不想使用 BigDecimal 的解析?这是最简单的方法,真的。
-
我想知道你为什么不想使用你给的sn-p?如果你需要使用你必须解析的数字?只是为了验证一个字符串可以按原样进入后端吗?
-
因为这种情况没有例外。例外是,好吧,不是程序控制的例外。
-
我也遇到过几次这个问题,虽然以这种方式利用异常感觉不正确,但它仍然是最简单的方法。它很简单,经过良好测试并且有效。我不再寻找其他方式。
-
理论上我同意这一点。如果您可以控制 BigDecimal 中使用的解析,则可以将其更改为返回一些指示解析失败的值,而不是抛出异常。但是,由于您无法控制它,我不会为已经存在的东西制作自己的实现,只是因为 BigDecimal 方式“不是很好,因为它使用异常”。
标签: java format numbers bigdecimal state-machine