我正在尝试安全地解析一个字符串,
public <T> long safeParseLong(T s){
try {
return Long.parseLong(s.toString());
}catch (NumberFormatException e){
return 0;
}
}
这将始终有效,如果字符串不可解析,则返回0。
但是,有没有办法知道它是不可解释的原因是什么?具体来说,我想知道它是不是一个数字("foo"
)还是数字太大(≥9223372036854775808)。
答案 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)