我正在尝试安全地解析字符串,
public <T> long safeParseLong(T s){
try {
return Long.parseLong(s.toString());
}catch (NumberFormatException e){
return 0;
}
}
这始终有效,如果字符串不可解析,它将返回 0。
但是,有没有办法知道无法解析的原因是什么?具体来说,我想知道它是否根本不是一个数字("foo"
)或者数字太大(≥ 9223372036854775808)。
最佳答案
如果字符串不是数字或者数字不适合 long
,Long.parseLong
方法将抛出 NumberFormatException
.
如果抛出异常,则测试该字符串是否符合数字的正则表达式,"[+-]?[0-9]+"
。如果匹配,则该数字无法容纳在 long
中。如果不匹配,则它根本不是一个数字,例如“foo”
。
boolean isNumber = s.toString().matches("[+-]?[0-9]+");
但是如果出现错误,您将返回 0
。这与字符串内容为 "0"
没有区别。也许让这个方法抛出异常会更好。但是,您可以创建并抛出 NotANumberException
(如果它不是数字字符串),或者抛出 NumberMagnitudeTooLargeException(如果解析失败,因为它是),而不是
NumberFormatException
。太大,无法放入长
中。
关于java - 检查数字是否太大或不是数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31598586/