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

时间:2015-07-23 21:44:41

标签: java

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

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

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

但是,有没有办法知道它是不可解释的原因是什么?具体来说,我想知道它是不是一个数字("foo")还是数字太大(≥9223372036854775808)。

2 个答案:

答案 0 :(得分:3)

如果字符串不是数字或者数字不适合Long.parseLong,则NumberFormatException方法会抛出long

如果抛出异常,则测试该字符串是否适合数字"[+-]?[0-9]+"的正则表达式。如果匹配,则它是一个不能适合long的数字。如果它不匹配,那么它根本就不是一个数字,例如"foo"

boolean isNumber = s.toString().matches("[+-]?[0-9]+");

但如果出现错误,您将返回0。如果字符串的内容是"0",则无法区分。也许最好让这种方法抛出异常。但是,如果NumberFormatException不是数字字符串,则可以创建并抛出NotANumberException,如果解析失败,则可以创建NumberMagnitudeTooLargeException,因为它也是long大到适合// //TextureManager.cpp // TextureManager* TextureManager::s_pInstance = 0;

答案 1 :(得分:-1)

不幸的是,Long.parseLong在任何情况下都会抛出NumberFormatException。

Long.parseLong(new String(new BigInteger(Long.toString(Long.MAX_VALUE)).add(new BigInteger("1")).toString()));

结果:

Exception in thread "main" java.lang.NumberFormatException: For input string: "9223372036854775808"
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Long.parseLong(Unknown Source)
    at java.lang.Long.parseLong(Unknown Source)
    at Main.main(Main.java:13)