鉴于String
的{{1}}表示,我想检查溢出。
我知道如何使用java的内置函数int
从String
转换int
。
但是如果parseInt
如此之大以至于它可能不适合String
?
int
我尝试检查String str = "214748364781";
int res = Integer.parseInt(str);
表示的符号,执行String
,如果符号不匹配,那么我可以说它会因parseInt
包裹而溢出但是当我实际上运行了它引发了int
例外。
NumberFormat
,因此它不能保证溢出。
所以我可以检查输入字符串的格式是否正确(所有数字),然后执行NumberFormat
然后如果我得到parseInt
我可以断定错误是由于溢出。
但是,我觉得应该采用更短的方式进行此项检查。
答案 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。
希望这有帮助。