[英]If a String containing a number bigger than Integer.MAX_VALUE
我想找到给定的字符串“99999999999999999999999999”或任何不适合任何数据类型的大量数字。我想查找该数字是否大于Integer.MAX_VALUE
BigInteger maxInt = BigInteger.valueOf(Integer.MAX_VALUE);
BigInteger value = new BigInteger("whatever");
if (value.compareTo(maxInt) > 0)
{
// larger
}
您可以从字符串构造一个BigInteger
对象,然后将该BigInteger
与Integer.MAX_VALUE
进行比较。
你可以调用parseInt
并捕获NumberFormatException
,如果数字太大则抛出它(尽管如果String
有非数字字符也会抛出它)。
如果要避免该异常,可以运行以下检查:
String
有超过10个字符(如果第一个字符是' - '或'+',则为11),它必须大于Integer.MAX_VALUE
或小于Integer.MIN_VALUE
。 Long.parseLong()
并将结果与Integer.MAX_VALUE
进行比较。 您可以将其解析为int并捕获异常或BigInteger,或者您可以执行String比较。
static final String MAX_INT_STR = Integer.toString(Integer.MAX_VALUE);
public static boolean checkInt(String s) {
return s.length() > MAX_INT_STR.length() || s.compareTo(MAX_INT_STR) > 0;
}
这可以用来避免在尝试解析之前抛出一些异常。
注意:这不会检查它只包含数字,但如果它是一个正数,它将检查它是否在边界而不解析字符串。
尝试以下代码来检查它是否太大而无法放入整数:
String num = "99999999999999999999999999";
try {
Integer.parseInt(num);
} catch(NumberFormatException ex) {
System.out.println("String did not fit in integer datatype");
}
此代码将尝试将num
解析为整数,我们可以在出现错误时捕获并在发生时执行代码(在本例中为简单的println
)。
从parseInt()
:
抛出:NumberFormatException - 如果字符串不包含可解析的整数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.