当前位置:主页 > >

String.Split()方法最后一个分隔符后有无内容的检查

时间:2020-07-11 10:16:28 | 栏目: | 点击:

问题产生

阿里巴巴Java开发手册第四章OOP规约第14条:
【推荐】使用索引访问用 String 的 split 方法得到的数组时,需做最后一个分隔符后有无内容的检查,否则会有抛 IndexOutOfBoundsException 的风险。
说明:
String str = "a,b,c,,";
String[] ary = str.split(",");
//预期大于 3,结果是 3
System.out.println(ary.length);
根据说明描述,还原了异常:
public class JudgeSeparator {
    public static void main (String args[]) {
        String str = "1,2,3,,,";
        // 分割之后的字符串
        String afterSplit[] = str.split(",");
        // 实际内容长度为6
        System.out.println("内容长度:" + afterSplit.length);
        System.out.println("第四个内容为:" + afterSplit[3]);
    }
}

有个很简单的解决思路,就是对需要分割的串,人为增加一个不为空的分割串,例如原串是"1,2,3,,,",分隔符是",",则在原串后增加",X",X可以是任意内容,不空就行。

取数的时候,就取length-1好了,相当于舍弃最后一个分割内容,就永远不会出现该问题啦。

以上代码优化为:

public class JudgeSeparator {
    public static void main (String args[]) {
        String str = "1,2,3,,,";
        
        //增加不为空的一个分割串
        str = str + ",X";
        
        // 分割之后的字符串
        String afterSplit[] = str.split(",");
        
        System.out.println("内容长度:" + afterSplit.length);
        System.out.println("第四个内容为:" + afterSplit[3]);
        
        //取数的时候取到length-1
        for(int i=0;i<afterSplit.length-1;i++){
            System.out.println("afterSplit["+i+"]..."+afterSplit[i]);
        }
    }
}


您可能感兴趣的文章:

相关文章