在Java中将字符串转换为整数时如何检测溢出

如果我想将字符串转换为Java中的int,您知道我是否可以检测到溢出吗?我的意思是,字符串文字实际上表示的值大于MAX_INT?

java doc没有提到它。.它只是说,如果不能将字符串解析为整数,它将通过FormatException没有提及有关溢出的问题。

回答:

是。捕获解析异常将是正确的方法,但是这里的困难在于,对 任何 解析错误(包括溢出)都Integer.parseInt(String

s)抛出a

。您可以通过查看JDK 文件中的Java源代码进行验证。幸运的是,由于s没有界限,所以存在一个构造器将抛出相同的解析异常, 范围限制 除外

。我们可以使用此知识来捕获溢出情况:NumberFormatExceptionBigInteger

/**

* 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

回到顶部