在Java中将字符串转换为整数时如何检测溢出
如果我想将字符串转换为Java中的int,您知道我是否可以检测到溢出吗?我的意思是,字符串文字实际上表示的值大于MAX_INT?
java doc没有提到它。.它只是说,如果不能将字符串解析为整数,它将通过FormatException没有提及有关溢出的问题。
回答:
是。捕获解析异常将是正确的方法,但是这里的困难在于,对 任何 解析错误(包括溢出)都Integer.parseInt(String
s)抛出a
。您可以通过查看JDK 文件中的Java源代码进行验证。幸运的是,由于s没有界限,所以存在一个构造器将抛出相同的解析异常, 但 范围限制 除外
。我们可以使用此知识来捕获溢出情况:NumberFormatException
BigInteger
/** * Provides the same functionality as Integer.parseInt(String s), but throws
* a custom exception for out-of-range inputs.
*/
int parseIntWithOverflow(String s) throws Exception {
int result = 0;
try {
result = Integer.parseInt(s);
} catch (Exception e) {
try {
new BigInteger(s);
} catch (Exception e1) {
throw e; // re-throw, this was a formatting problem
}
// We're here iff s represents a valid integer that's outside
// of java.lang.Integer range. Consider using custom exception type.
throw new NumberFormatException("Input is outside of Integer range!");
}
// the input parsed no problem
return result;
}
如果你真的需要自定义此为 仅
超过Integer.MAX_VALUE的输入,你可以这样做只是抛出自定义异常,通过使用@谢尔盖的建议之前。如果上述方法过于矫kill过正,并且您无需隔离溢出情况,只需通过捕获它来抑制异常:
int result = 0;try {
result = Integer.parseInt(s);
} catch (NumberFormatException e) {
// act accordingly
}
以上是 在Java中将字符串转换为整数时如何检测溢出 的全部内容, 来源链接: utcz.com/qa/404717.html