给定int的字符串表示,检查溢出

时间:2016-10-29 14:35:45

标签: java integer

鉴于String的{​​{1}}表示,我想检查溢出。

我知道如何使用java的内置函数intString转换int。 但是如果parseInt如此之大以至于它可能不适合String

,该怎么办?
int

我尝试检查String str = "214748364781"; int res = Integer.parseInt(str); 表示的符号,执行String,如果符号不匹配,那么我可以说它会因parseInt包裹而溢出但是当我实际上运行了它引发了int例外。

对于任何格式错误的字符串,都会抛出

NumberFormat,因此它不能保证溢出。

所以我可以检查输入字符串的格式是否正确(所有数字),然后执行NumberFormat然后如果我得到parseInt我可以断定错误是由于溢出。

但是,我觉得应该采用更短的方式进行此项检查。

4 个答案:

答案 0 :(得分:2)

将其解析为Long,如果有效则将其解析为Integer,如果它在此时抛出异常,则溢出。

OR

将其解析为Long并检查它是否大于Integer.MAX_VALUE

答案 1 :(得分:2)

您可以将其解析为ImportantDataProcessing并检查它是否大于BigInteger

Integer.MAX_VALUE

答案 2 :(得分:1)

如果您正在使用Java 8,则可以将其解析为Long类型,然后使用Math.toIntExact(long value)来获取int值。如果出现溢出,则抛出未经检查的ArithmeticException

以下是您的代码示例:

String str = "214748364781";
int res = Math.toIntExact(Long.parseLong(str));

或进一步简化:

int res = Math.toIntExact(Long.parseLong("214748364781"));

正如预期的那样,我们得到整数溢出异常,如下所示:

Exception in thread "main" java.lang.ArithmeticException: integer overflow
    at java.lang.Math.toIntExact(Math.java:1011)

答案 3 :(得分:1)

只是给你一个不同的选择,如果你想做的就是检查你的字符串是否会溢出,你可以按字典顺序进行比较。字符串比较通常比解析数字要快得多。

假设只有正整数。

function(input, FUN, output) {

    output <- FUN(input)

    return(input)

}

现在,在现实生活中,如果你可能有大整数,你应该按照其他答案的建议使用Long或BigInteger。

希望这有帮助。