我想查找是否给定字符串“ 999999999999999999999999999999”或任何不适合任何数据类型的大量数字。我想查找该数字是否大于Integer.MAX_VALUE
答案 0 :(得分:8)
BigInteger maxInt = BigInteger.valueOf(Integer.MAX_VALUE);
BigInteger value = new BigInteger("whatever");
if (value.compareTo(maxInt) > 0)
{
// larger
}
答案 1 :(得分:5)
您可以从字符串中构造一个BigInteger
对象,然后将该BigInteger
与Integer.MAX_VALUE
进行比较。
答案 2 :(得分:5)
您可以调用parseInt
并捕获NumberFormatException
,如果数字太大则抛出该错误(尽管如果String
具有非数字字符,也会抛出该错误)。
如果要避免该异常,可以运行以下检查:
String
包含10个以上的字符(如果第一个字符为'-'或'+',则为11个以上),它必须大于Integer.MAX_VALUE
或小于Integer.MIN_VALUE
。Long.parseLong()
并将结果与Integer.MAX_VALUE
进行比较。答案 3 :(得分:2)
您可以将其解析为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;
}
这可以用来避免在尝试解析之前引发一些异常。
注意:这不会检查它是否仅包含数字,但是如果它是正数,它将在不解析字符串的情况下检查它是否在边界内。
答案 4 :(得分: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-如果字符串不包含 可解析的整数。