如果字符串包含的数字大于Integer.MAX_VALUE

时间:2018-12-06 08:42:46

标签: java string int

我想查找是否给定字符串“ 999999999999999999999999999999”或任何不适合任何数据类型的大量数字。我想查找该数字是否大于Integer.MAX_VALUE

5 个答案:

答案 0 :(得分:8)

使用BigInteger

BigInteger maxInt = BigInteger.valueOf(Integer.MAX_VALUE);
BigInteger value = new BigInteger("whatever");

if (value.compareTo(maxInt) > 0)
{
    // larger
}

答案 1 :(得分:5)

您可以从字符串中构造一个BigInteger对象,然后将该BigIntegerInteger.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-如果字符串不包含   可解析的整数。