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

拆分字符串后触发数组越界异常,期望返回null却报错

Java字符串拆分末尾空串处理及空值替换问题

问题原因

Java中String.split(String regex)默认调用split(regex, 0),当第二个参数limit为0时,会自动丢弃拆分后末尾的所有空字符串。这就导致:

  • 示例1中末尾的000是有效值,拆分后被保留,数组长度足够,访问索引5正常
  • 示例2中末尾全是空串,被全部丢弃,拆分后的数组长度仅为3,访问索引5自然触发ArrayIndexOutOfBoundsException

解决方案

要实现“末尾空位置返回null”的需求,需要两步操作:

  1. 使用split(";", -1)保留所有空字符串(包括末尾的)
  2. 将拆分结果中的空字符串替换为null

修正后的代码示例

public class Digits {
    public static void main(String[] args) {
        String s = "123;456;;;;";
        // 传入limit=-1,保留所有拆分出的空字符串
        String[] field = s.split(";", -1);
        
        // 将空字符串替换为null
        for (int i = 0; i < field.length; i++) {
            if (field[i].isEmpty()) {
                field[i] = null;
            }
        }
        
        System.out.println(field.length); // 输出6
        System.out.println(field[5]);     // 输出null
    }
}

关于split方法的limit参数说明

  • limit > 0:最多拆分limit-1次,数组长度不超过limit,末尾的空字符串会被保留
  • limit = 0:尽可能多次拆分,自动丢弃末尾所有空字符串(默认行为)
  • limit < 0:尽可能多次拆分,保留所有空字符串(包括末尾的)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 23:15:11