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

求助:Java中Integer.parseInt()解析"117"字符串抛出NumberFormatException

解决Integer.parseInt()抛出NumberFormatException的隐藏字符问题

嘿,我之前也踩过一模一样的坑!看起来你拿到的"117"字符串表面上是正常数字,但实际上大概率包含了不可见的特殊字符,导致Integer.parseInt()识别失败——毕竟从UTF-8文件读取时很容易碰到这类问题。

先排查问题根源:找出隐藏字符

你可以先写一段小代码,把字符串里每个字符的Unicode值打印出来,就能清楚看到是不是有额外的“隐形”字符:

String problematicStr = "117"; // 替换成你实际拿到的那个子串
for (char c : problematicStr.toCharArray()) {
    System.out.printf("字符: '%c' (Unicode编码: %04x)%n", c, (int) c);
}

执行后如果看到除了数字'1'(Unicode 0031)和'7'(0037)之外的字符,比如UTF-8 BOM标记ufeff、全角空格3000或者零宽空格200b,那就是问题所在了。

快速解决方法:清理字符串中的非数字字符

不管是哪种隐藏字符,直接用正则表达式把所有非数字的内容去掉就行,这样就能得到干净的数字字符串:

String cleanNumStr = problematicStr.replaceAll("[^0-9]", "");
int result = Integer.parseInt(cleanNumStr);

这个方法简单粗暴,适用于大多数场景。

从源头避免:读取文件时处理BOM或特殊字符

如果是UTF-8文件带BOM导致的问题,你可以在读取文件时就处理掉BOM标记。比如用InputStreamReader读取时,先检查开头的字节:

FileInputStream fis = new FileInputStream("your-file.txt");
// 检查并跳过UTF-8 BOM(EF BB BF)
if (fis.read() != 0xef || fis.read() != 0xbb || fis.read() != 0xbf) {
    fis.reset(); // 如果不是BOM,重置流指针
}
InputStreamReader reader = new InputStreamReader(fis, StandardCharsets.UTF_8);
// 后续正常读取内容

这样就能从根源上避免BOM字符混入字符串中。

内容的提问来源于stack exchange,提问作者M.Smith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:35:10