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

splitData[0]为数字仍触发NumberFormatException?输入串为"1"

问题排查与解决

你遇到的这个问题看似反常——明明输入串显示是"1"却触发NumberFormatException,核心原因是这个"1"字符串里包含了肉眼不可见的非数字字符,比如全角空格、零宽空格、控制字符,甚至是看起来和半角"1"一样的全角数字"1"。

排查步骤

先加一段代码打印字符串的详细信息,揪出隐藏的异常字符:

String firstPart = splitData[0];
// 正常半角"1"的长度是1,若长度大于1则说明有隐藏字符
System.out.println("splitData[0]的长度:" + firstPart.length());
// 逐个打印字符的ASCII码,正常半角"1"的ASCII值是49
for (char c : firstPart.toCharArray()) {
    System.out.printf("字符:%c,ASCII码:%d%n", c, (int)c);
}

如果输出长度大于1,或者ASCII码不是49,就能直接定位到异常字符的问题。

解决方法

针对隐藏字符,有两种快速处理方案:

  1. 先去除字符串前后的空白类字符(包括空格、制表符、换行符):
int foo = Integer.parseInt(splitData[0].trim());
  1. 直接过滤掉所有非数字字符(适合存在中间隐藏字符的极端场景):
int foo = Integer.parseInt(splitData[0].replaceAll("[^0-9]", ""));

另外还要留意数据来源:如果是从文件读取的内容,可能携带了UTF-8 BOM(字节顺序标记),这种不可见字符会附着在字符串开头,需要在读取文件时跳过BOM,或者通过字符串处理移除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 22:05:23