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

为何Integer.parseInt方法无法处理String.split分割后的字符串?

解决String.split提取数字时的NumberFormatException问题

我来帮你搞定这个报错!咱们先拆解下问题出在哪:

当你执行g.split("hi")处理字符串"hi5hi6"时,拆分出来的数组其实是["", "5", "6"],而不是你预期的["5", "6"]。这是因为原字符串开头就是分隔符"hi",split方法会把分隔符前面的空内容也作为数组的第一个元素保留下来。当你尝试对这个空字符串调用Integer.parseInt(k)时,就会触发NumberFormatException——毕竟空字符串没法转成整数嘛。

下面给你几个可行的解决方案:

方案1:过滤空字符串后再转换

在循环里先判断当前字符串是否为空,跳过空元素再执行转换:

String g = "hi5hi6";
String[] l = g.split("hi");
for (String k : l) {
    if (!k.isEmpty()) { // 跳过空字符串
        int p = Integer.parseInt(k);
        System.out.println(p);
    }
}

这个方法简单直接,适合格式相对固定的场景。

方案2:用正则表达式直接提取数字(更通用)

如果你的字符串格式可能变化,推荐直接用正则匹配所有数字,这样不管数字前后是什么内容,都能准确提取:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        String g = "hi5hi6";
        // 匹配一个或多个数字的正则表达式
        Pattern pattern = Pattern.compile("\\d+");
        Matcher matcher = pattern.matcher(g);
        // 遍历所有匹配到的数字
        while (matcher.find()) {
            int p = Integer.parseInt(matcher.group());
            System.out.println(p);
        }
    }
}

这种方法适用性更广,比如如果字符串变成"abc123def45"也能正常提取数字。

方案3:跳过数组的第一个元素

如果你确定原字符串一定以"hi"开头,也可以直接从数组的索引1开始遍历,跳过第一个空元素:

String g = "hi5hi6";
String[] l = g.split("hi");
// 从索引1开始遍历,跳过第一个空元素
for (int i = 1; i < l.length; i++) {
    int p = Integer.parseInt(l[i]);
    System.out.println(p);
}

不过这个方法局限性大,如果字符串开头没有"hi",就会漏掉第一个有效数字,谨慎使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 20:08:13