java - 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
}
解决方案
由于您的值范围仅限于"+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
推荐阅读
- c++ - 填充字符串数组时遇到问题
- html - Pandoc:转换 HTML 内联样式
- node.js - 我将图片上传到服务器,但未能带入图片
- assembly - 给定PC=0x32011C,一个值位于0x32010C,那么偏移量是多少?
- python - Pandas groupby/apply 对 int 和 string 类型有不同的行为
- docker - 使用 Docker 在两个文件夹中编译两个应用程序
- javascript - 为什么按钮不触发第二个功能?
- javascript - 如何找到我刚刚上传到 S3 的流的总大小?
- c# - SendGrid 联系人 API
- excel - 我如何循环遍历数组和数组