java - 检查数字是否太大或不是数字

标签 java

我正在尝试安全地解析字符串,

public <T> long safeParseLong(T s){
    try {
        return Long.parseLong(s.toString());
    }catch (NumberFormatException e){
        return 0;
    }
}

这始终有效,如果字符串不可解析,它将返回 0。

但是,有没有办法知道无法解析的原因是什么?具体来说,我想知道它是否根本不是一个数字("foo")或者数字太大(≥ 9223372036854775808)。

最佳答案

如果字符串不是数字或者数字不适合 longLong.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/

相关文章:

Java - 在图像子文件夹中导入主类

java - OpenFire 服务器中用户的 JID 应该是什么?

java - 如何从 Java/Android 中的另一个类获取 ArrayList 中存储的数据?

java - 如何从具有完整权限的本地磁盘加载已签名的小程序?

java - 将日期格式转换为另一种格式时出错

java - Android 测验应用程序中的单选按钮

java - Spinner 中奇怪的 NullPointerException

java - 如何将对象存储在我想要声明 2 个或更多对象的数组中,以及如何使用另一个类对象调用该数组

Java 进程无缘无故挂起

java - sphinx 方面搜索 : 'with_all' analogue for php/java