我有一串有符号整数值,范围从“+2147483650”到“-9638527412”。我需要将它们解析为 32 位整数,这样,当字符串值高于整数容量 (2^31) 时,它应该返回最接近的可能整数值。使用“Integer.parseInt”会产生越界异常。
示例:
input: "+2147483650"
output: "+2147483647"
input: ""-963852741258"
output: "-2147483648"
我尝试使用现有的功能,但我被困在这里。
<小时/>try{
//num =Integer.valueOf(stringNumber);
num =Integer.parseInt(stringNumber);
}catch(Exception e){
num = -2147483648; // if stringNumber is negative
num = +2147483647 // if stringNumber is positive
}
最佳答案
由于您的值范围仅限于 "+2147483650"
到 "-9638527412"
,因此您可以解析为 long
并检查是否溢出.
public static int parse(String stringNumber) {
long value = Long.parseLong(stringNumber);
return (value < Integer.MIN_VALUE ? Integer.MIN_VALUE :
value > Integer.MAX_VALUE ? Integer.MAX_VALUE : (int) value);
}
测试
System.out.println(parse("+2147483650"));
System.out.println(parse("42"));
System.out.println(parse("-9638527412"));
输出
2147483647
42
-2147483648
关于java - Java中字符串转32位整数,默认值大于异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51294377/