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

列表空元素引发StringIndexOutOfBoundsException问题求助

解决StringIndexOutOfBoundsException问题,同时保留空元素的索引

嘿,我来帮你搞定这个问题!你遇到的这个索引越界错误,其实是两个小细节没处理好导致的,咱们一步步来捋清楚:

问题出在哪?

  1. 空字符串的判断逻辑错了:你用(date_sold.get(w)) != ""来检查字符串是否为空,这在Java里行不通。因为""是一个固定的字符串对象,而date_sold里的空字符串可能是另一个对象,!=比的是对象的内存地址,不是内容。这就导致有些空字符串没被检测出来,直接进入了后续的截取操作。
  2. 空字符串不能调用substring:就算你判断对了,要是真的拿到空字符串,调用substring(0,2)肯定会报错——空字符串长度是0,根本没有前两位字符啊!

修正后的代码

public static void getTotalSales() {
    int w = 0;
    while (w < date_sold.size()) {
        String currentDate = date_sold.get(w);
        // 先判断不为null,再检查内容是否非空
        if (currentDate != null && !currentDate.isEmpty()) {
            // 只处理有效日期,截取前两位
            date_sold.set(w, currentDate.substring(0, 2));
        }
        // 空元素啥也不做,直接跳过,保留原位置
        w++;
    }
    System.out.println(date_sold);
}

核心改进说明

  • 正确判断空字符串:用!currentDate.isEmpty()来检查字符串内容是否为空,这是Java里判断空字符串的标准姿势。
  • 防NullPointerException:加了currentDate != null的判断(如果你的列表里可能出现null值的话),避免额外报错。
  • 保留空元素索引:空的元素直接跳过不修改,完全保留原来的列表结构,满足你“索引很重要”的需求。

这样改完之后,代码就会乖乖跳过所有空的(或null的)date_sold元素,只处理有效的日期字符串,再也不会抛出索引越界的错误啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:14:43