考虑以下Java
代码:
String columnValue = "188237574385834583453453635";
columnValue =(Long.parseLong(columnValue)>Long.MAX_VALUE?"0":columnValue);
它会抛出java.lang.NumberFormatException
,因为输入值超出Long
的最大值。但是,有一种简单的方法可以检测“字符串”类型中的数字是否超出Long
的最大值而不使用try
catch
解决方案?
答案 0 :(得分:8)
懒惰的方式可以是使用BigInteger。
BigInteger a = new BigInteger("188237574385834583453453635");
BigInteger b = BigInteger.valueOf(Long.MAX_VALUE);
System.out.println("a > Long.MAX_VALUE is : " + (a.compareTo(b) > 0 ? "true" : "false"));
如果性能很重要,则必须测试更多解决方案。
提取parseLong的源代码,而不是抛出一个 异常,返回一个布尔值。
代码中还有很多throw
,有些用于格式,有些用于溢出,你必须选择正确的。{/ p>
答案 1 :(得分:0)
一种非常俗气的方式:
columnValue.length() > ("" + Long.MAX_VALUE).length()
当然,这不包括大于Long.MAX_VALUE的值,但是数字位数相同,只有更多数字的值。
答案 2 :(得分:-1)
不是。
唯一天真的部分解决方案是比较字符串的长度,但这不会一直有效。
答案 3 :(得分:-1)
您可以创建一个实用程序方法来包装try / catch并返回一个布尔值,如:
import java.util.*;
import java.lang.*;
import java.io.*;
class TestClass
{
public static void main (String[] args) throws java.lang.Exception
{
System.out.println(TestClass.isLongString("188237574385834583453453635"));
}
public static boolean isLongString(final String longNumber)
{
boolean isLong = false;
try
{
Long.parseLong(longNumber);
isLong = true;
}
catch(Exception e)
{
// do nothing - return default false
}
return isLong;
}
}