You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

字符串"008949679851"转Integer抛NumberFormatException的原因及解决

哈哈,这个问题我之前踩过坑!其实不是字符串长度的限制,是Java里Integer类型的取值范围在搞鬼~

为什么会抛出NumberFormatException?

Java的Integer是32位有符号整数,它的取值范围是 -2147483648 到 2147483647。你要转换的字符串"008949679851"去掉前导零后是数字8949679851,这个数远远大于Integer的最大值2147483647,所以Integer.valueOf()会直接抛出异常。

而你去掉前三位后的"949679851"转成数字是949679851,这个数刚好在Integer的范围内,所以能正常转换。

怎么实现完整字符串的正常转换?

根据你的数字大小,有两种方案:

  1. 使用Long类型转换
    Long是64位有符号整数,取值范围是 -9223372036854775808 到 9223372036854775807,你的数字8949679851完全在这个范围内,替换成Long.valueOf()就可以了:
String sku = "008949679851";
System.out.println(Long.valueOf(sku));
  1. 如果数字超过Long范围,用BigInteger
    如果以后遇到更长的数字(比如超过19位),Long也存不下,这时候可以用java.math.BigInteger,它能处理任意大小的整数:
String sku = "008949679851";
System.out.println(new BigInteger(sku));

另外补充一句:字符串里的前导零不会影响转换结果,不管是Integer、Long还是BigInteger,都会自动忽略前导零,直接解析后面的有效数字。

内容的提问来源于stack exchange,提问作者Qaddaffi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:54:58