繁体   English   中英

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

[英]If a String containing a number bigger than Integer.MAX_VALUE

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

使用BigInteger

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

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

您可以从字符串构造一个BigInteger对象,然后将该BigIntegerInteger.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM