关于字符串分割成数组的问题

monkeyFeng 发布于 2017/02/28 18:33
阅读 173
收藏 0

这样一段代码:

String test = "";
        
 String[] array = test.split(",");
        
 System.err.println(array.length);  ===》输出结果为:1

 

这样修改一下:

String test = ",,,";
        
String[] array = test.split(",");
        
System.err.println(array.length);  ===》输出结果为:0

 

很是费解,有没有人详细说明一下呢?

加载中
0
fate-testarossa
fate-testarossa

按照split后的每一项为空,“1,2”就会返回两项,“1,”返回一项。空是不能做为某一个元素的

去掉,后确实是没有任何元素了

monkeyFeng
monkeyFeng
对的,这样的话spilt(str,-1),逗号前后的内容都会计入长度,不论是不是空。
0
如比如比
如比如比

","在""中不存在,所以用new String[]{""}返回,元素个数为1;","在",,,"中是存在的,但分割后的结果length=0,所以被忽略掉了,结果为0。出现了两种结果是吧,目前JDK是这样定义的,或许org.apache.commons.lang.StringUtils.split的结果相比之下能贴切些吧。参照:http://yinny.iteye.com/blog/1750210

monkeyFeng
monkeyFeng
感谢提供的网址,看了一下,对这个分割的理解深入了,以后做项目碰到这种分割,需要考虑考虑了
0
fate-testarossa
fate-testarossa

引用来自“壶漏子”的评论

","在""中不存在,所以用new String[]{""}返回,元素个数为1;","在",,,"中是存在的,但分割后的结果length=0,所以被忽略掉了,结果为0。出现了两种结果是吧,目前JDK是这样定义的,或许org.apache.commons.lang.StringUtils.split的结果相比之下能贴切些吧。参照:http://yinny.iteye.com/blog/1750210

结果是一样的啊,去掉‘,’后确实没有元素,jdk的表现是对的

0
如比如比
如比如比

引用来自“壶漏子”的评论

","在""中不存在,所以用new String[]{""}返回,元素个数为1;","在",,,"中是存在的,但分割后的结果length=0,所以被忽略掉了,结果为0。出现了两种结果是吧,目前JDK是这样定义的,或许org.apache.commons.lang.StringUtils.split的结果相比之下能贴切些吧。参照:http://yinny.iteye.com/blog/1750210

引用来自“fate-testarossa”的评论

结果是一样的啊,去掉‘,’后确实没有元素,jdk的表现是对的

谁和谁的结果是一样的,说清楚好不。这里有谁不对的了么?JDK已经做成那样了而已。

0
fate-testarossa
fate-testarossa

引用来自“壶漏子”的评论

","在""中不存在,所以用new String[]{""}返回,元素个数为1;","在",,,"中是存在的,但分割后的结果length=0,所以被忽略掉了,结果为0。出现了两种结果是吧,目前JDK是这样定义的,或许org.apache.commons.lang.StringUtils.split的结果相比之下能贴切些吧。参照:http://yinny.iteye.com/blog/1750210

引用来自“fate-testarossa”的评论

结果是一样的啊,去掉‘,’后确实没有元素,jdk的表现是对的

引用来自“壶漏子”的评论

谁和谁的结果是一样的,说清楚好不。这里有谁不对的了么?JDK已经做成那样了而已。

你有没有试过StringUtils.split(",", ","),结果和jdk的结果是一样的,本身jdk这种处理逻辑也没错

如比如比
如比如比
不要跑题,确认下楼主的两种情况分别是否是一样的
0
fate-testarossa
fate-testarossa

引用来自“fate-testarossa”的评论

按照split后的每一项为空,“1,2”就会返回两项,“1,”返回一项。空是不能做为某一个元素的

去掉,后确实是没有任何元素了

但是我觉得jdk的逻辑是没有问题的

返回顶部
顶部