首页 > 解决方案 > Java中的字符串到32位整数,默认值比异常

问题描述

我有一串有符号整数值,范围从“+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
}
  

  

标签: javastringparsingint

解决方案


由于您的值范围仅限于"+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

推荐阅读