拆分字符串后触发数组越界异常,期望返回null却报错
Java字符串拆分末尾空串处理及空值替换问题
问题原因
Java中String.split(String regex)默认调用split(regex, 0),当第二个参数limit为0时,会自动丢弃拆分后末尾的所有空字符串。这就导致:
- 示例1中末尾的
000是有效值,拆分后被保留,数组长度足够,访问索引5正常 - 示例2中末尾全是空串,被全部丢弃,拆分后的数组长度仅为3,访问索引5自然触发
ArrayIndexOutOfBoundsException
解决方案
要实现“末尾空位置返回null”的需求,需要两步操作:
- 使用
split(";", -1)保留所有空字符串(包括末尾的) - 将拆分结果中的空字符串替换为
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
相关产品推荐
相关产品推荐

