【发布时间】:2018-12-06 08:42:46
【问题描述】:
我想查找是否给定字符串“99999999999999999999999999”或任何不适合任何数据类型的大量数字。我想知道该数字是否大于 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 - 如果字符串不包含 可解析整数。
【讨论】: