String.Split()方法最后一个分隔符后有无内容的检查
时间:2020-07-11 10:16:28|栏目:|点击: 次
问题产生
阿里巴巴Java开发手册第四章OOP规约第14条:
阿里巴巴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]);
}
}
}
上一篇:java将word文档转pdf并添加水印的实现方法详解
栏 目:
本文标题:String.Split()方法最后一个分隔符后有无内容的检查
本文地址:http://www.codeinn.net/misctech/2338.html






