java - Java中字符串转32位整数,默认值大于异常

标签 java string parsing int

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

相关文章:

java - 在分隔符是一个单词的java中拆分一个字符串

java - 添加工具栏不起作用

java - 强制执行 javax.faces.application.ViewExpiredException 来测试应用程序

getParseData 的反转 : from parsed code back to code

jquery - 如何在 jQuery 中用空格或单引号替换双引号?

java - Xstream 在输出中插入奇怪的标签

java - 为特定场景编写junit测试

java - 将 Unicode 转义符替换为相应的字符

string - 如何以编程方式将 MAC 地址插入/etc/network/interfaces?

java - 如何使用java正则表达式识别字符的第四次出现