继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Java系列: java中split的下角标越界

素小暖
关注TA
已关注
手记 57
粉丝 171
获赞 888

有的时候总觉得split很好用,屡试不爽,但他偶尔也会给你一点小惊喜。

String ids = "1,2,3,";
// 对,你没有看错,我故意这么写的,根据我们的设想这里一定是四个值拼接的,即时有空字符串,使用split神器也可以成功分割出长度为4的数组。

// 所以我这么写了。
String[] idArr = ids.split(",");
String idA = idArr[0];
String idB = idArr[1];
String idC = idArr[2];
String idD = idArr[3];

// 好的...你突然发现挂了,抛出数组下标越界了。

// 新手,或者不常用split的人总是会认为idArr的长度应该是4,实际上他只有3。是的这就是java中的split,因为你在别的地方用过的split不是这样的,比如javascript中的split,如果是这个例子的话,那么毫无疑问他的长度是4,最后一个为""空字符串。

// 实际上java的split有一个重载方法,是两个参数的,ok第二个参数就是你期望数组的长度,当然如果你写100,那么你也不可能得到长度为100的数组在本例当中,他是个limit的概念。
String[] idArr = ids.split(",",4); // 这有写长度是4
String[] idArr = ids.split(",",100); // 这有写长度也是4
String[] idArr = ids.split(",",3); // 这有写长度是3
String[] idArr = ids.split(",",2); // 这有写长度是2

// ok看到这里大家应该明白了,所以java的split默认是根据指定的字符去截取,然后末尾如果都是空字符串,那么全部舍去,除非你限定长度。
// 而javascript确实默认没有去处理空字符串的问题。
打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP