Java,检测一个String是否超出Long类型的值边界

chr*_*ina 2 java long-integer

给出以下Java代码:

String columnValue = "188237574385834583453453635";
columnValue =(Long.parseLong(columnValue)>Long.MAX_VALUE?"0":columnValue);
Run Code Online (Sandbox Code Playgroud)

它会抛出,java.lang.NumberFormatException因为输入值超出了Long最大值.但是,有一种简单的方法可以检测"字符串"类型中的数字是否Long超出了使用try catch解决方案的最大值?

Ora*_*ace 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"));
Run Code Online (Sandbox Code Playgroud)

如果性能很重要,则必须测试更多解决方案.

@SotiriosDelimanolis的想法也很好:

提取parseLong的源代码,而不是抛出异常,返回一个布尔值.

throw代码中还有很多,有些用于格式,有些用于溢出,你必须选择正确的.