列表空元素引发StringIndexOutOfBoundsException问题求助
解决StringIndexOutOfBoundsException问题,同时保留空元素的索引
嘿,我来帮你搞定这个问题!你遇到的这个索引越界错误,其实是两个小细节没处理好导致的,咱们一步步来捋清楚:
问题出在哪?
- 空字符串的判断逻辑错了:你用
(date_sold.get(w)) != ""来检查字符串是否为空,这在Java里行不通。因为""是一个固定的字符串对象,而date_sold里的空字符串可能是另一个对象,!=比的是对象的内存地址,不是内容。这就导致有些空字符串没被检测出来,直接进入了后续的截取操作。 - 空字符串不能调用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
相关产品推荐
相关产品推荐

