java.lang.NumberFormatException: For input string: "19000000000" at java.lang.NumberFormatExceptio

本文介绍了一个关于Java中使用Integer.parseInt方法解析大数值时出现的NumberFormatException异常案例。当尝试解析超过int类型范围的字符串数字时,程序会抛出异常。文章通过一个具体的代码示例解释了问题的原因,并给出了避免此类错误的方法。


Exception in thread "main" java.lang.NumberFormatException: For input string: "19000000000"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at num1.main(num1.java:13)


1.源码如下

String s="19000000000";

    //   String m=s.substring(0, s.length());
       System.out.println(s);
       int f=Integer.parseInt(s);

       System.out.println(f);

将String s="19000000000";改成String s="1900000000"就不会报错了,原因是因为用Interger.parseInt()解析的数不能太大


### 问题分析 `java.lang.NumberFormatException: For input string: "1 "` 异常表明 Java 在尝试将字符串转换为数字时失败。具体来说,字符串 `"1 "` 包含了一个尾部空格,而 `Integer.parseInt()` 或 `Double.parseDouble()` 等方法无法解析包含非数字字符的字符串。 这种异常通常出现在以下场景中: - 用户输入未经过滤或清理; - 字符串拼接后未去除空白字符; - 从外部系统获取的数据中包含不可见字符; - 在解析 MAC 地址、日志字段等时未进行格式标准化。 类似问题曾在 MAC 地址解析中出现过,例如将 `"20:25:05:05:03:02"` 转换为十六进制整数时因格式问题导致异常[^3]。 --- ### 解决方法 #### 1. 使用 `trim()` 去除空白字符 在调用 `Integer.parseInt()` 或 `Double.parseDouble()` 前,应使用 `trim()` 方法去除字符串两端的空白字符: ```java String input = "1 "; int number = Integer.parseInt(input.trim()); System.out.println(number); // 输出 1 ``` 此方法适用于大多数因空格导致的 `NumberFormatException` 情况[^1]。 #### 2. 使用正则表达式过滤非数字字符 如果字符串中可能包含其他非数字字符(如逗号、百分号等),可以使用正则表达式保留数字部分: ```java String input = "1 "; int number = Integer.parseInt(input.replaceAll("[^\\d]", "")); System.out.println(number); // 输出 1 ``` 这种方式可以处理更复杂的输入格式,例如 `"1,234"` 或 `"100%"` 等。 #### 3. 使用 `try-catch` 捕获异常 在实际开发中,建议使用 `try-catch` 结构来捕获异常并提供默认值或日志记录: ```java String input = "1 "; int number; try { number = Integer.parseInt(input.trim()); } catch (NumberFormatException e) { System.err.println("输入格式错误: " + input); number = 0; // 默认值 } ``` 这种方式可以增强程序的健壮性,并避免因格式错误导致程序崩溃[^2]。 #### 4. 使用 `Optional` 进行安全解析(Java 8+) 若使用 Java 8 或更高版本,可以结合 `Optional` 实现更安全的解析逻辑: ```java import java.util.Optional; String input = "1 "; Optional<Integer> number = Optional.ofNullable(input) .map(String::trim) .filter(s -> s.matches("\\d+")) .map(Integer::parseInt); System.out.println(number.orElse(0)); // 输出 1 ``` --- ### 特殊场景处理 在某些框架中,如 MyBatis 使用 OGNL 表达式解析字符串时,若表达式中包含特殊字符(如 `!`),也可能引发类似异常。此时应确保字符串在解析前已标准化或转义[^4]。 --- ### 总结 处理 `NumberFormatException` 的核心在于: - 保证输入字符串的格式符合数字解析要求; - 使用 `trim()` 清理空白字符; - 使用正则表达式过滤非数字内容; - 使用异常捕获机制增强程序健壮性; - 在框架中注意表达式字符串的格式标准化。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值