java拆分string后取值问题

来源:百度知道 编辑:UC知道 时间:2024/06/03 16:36:25
代码如下:
String[] ss=new String[3];
String ob="123|22";//有可能为“123|22|33”
ss=ob.split("\\|");
test.setId((ss[2]==null)?0:(Integer.parseInt(ss[2])));//int id 为test对象的成员
//在ob=“123|22|33”正确,但ob="123|22"时得不到值

应该是一开始你对ss的定义使你误认为

当执行ss=ob.split("\\|");这条语句之后

如果没有第二个"|" 则ss[2]也应该是null

但事实是当你执行ss=ob.split("\\|");这条语句时

ss已经不再指向你开始声明(String[] ss=new String[3]; )的内存区域

而是指向了ob.split("\\|")结果

所以当你处理String ob="123|22"; 引用ss[2]时就会出现数组边界错误了

当ob = "123|22|33" 的时候 ss[0] = 123 s[1] = 22 s[2] = [33]
所以你可以拿到s[2]
但是在 ob="123|22" 的时候 ss[2]为 null 所以你拿不到

通过split产生的结果的数组是以0为起始的,也就是说
ob=“123|22|33”的时候ss[0] = 123,ss[1] = 22 , ss[2] = 33
如果ob = “123|22” 只有0,1 两个值,你直接取ss[2] 当然就报错了