程序员的自我修养

关于String split(String)

1条评论1,415次浏览

"13309970XXX,4,,,1,0,,,,24,0,0,19,0,,,,,,,,0,0,,0,,,,"

今天写MapReduce进行split的时候发现一个问题:

原始数据皆为29个字段,以“,”分隔,结果以上这个字符串经过split后的长度居然是25。

经过打印出分隔后的数组,发现:

length=25
0 : 13309970XXX
1 : 4
2 :
3 :
4 : 1
5 : 0
6 :
7 :
8 :
9 : 24
10 : 0
11 : 0
12 : 19
13 : 0
14 :
15 :
16 :
17 :
18 :
19 :
20 :
21 : 0
22 : 0
23 :
24 : 0

也就是说字符串中最后一个0后面的",,,,"没有成为数组的一部分。

后尝试StringUtils.split(s,","),结果:

length=12
0 : 13309970XXX
1 : 4
2 : 1
3 : 0
4 : 24
5 : 0
6 : 0
7 : 19
8 : 0
9 : 0
10 : 0
11 : 0

更加不是我想要的结果。

最后看了看split的源码,发现split方法调用了split(String, int)方法,尝试s.split(",",29)成功输出想要的结果。

查看split(String, int)源码,发现以下语句导致出现以上的问题,当调用split(String)时limit为0,进入while循环,然后从后向前检查list中item的长度是否为0,若为0,则删除。。。

好吧,不知道为何jdk要这么设计,但好歹可以通过split(String, int)来搞定上面的那个场景。但要是遇到预先并不知道数组的长度而又需要获取正确的(或者称之为原始的)split长度时,该如何处理呢。。?

当然可以自己实现一个split,但也可以使用Guava的Spliter。例如以下代码就可以正确的获取到分隔后的数组:

分类:Java语言
标签:
profile
  • 文章总数:81篇
  • 评论总数:275条
  • 分类总数:32个
  • 标签总数:45个
  • 运行时间:1277天

大家好,欢迎来到selfup.cn。

这不是一个只谈技术的博客,这里记录我成长的点点滴滴,coding、riding and everthing!

最新评论
  • kuyuzasur: what do i tell doctor to get viagra. edhelprie.mdhelpserv.com – how long we can take viagra,
  • Anonymous: 这个问题可以忽略。不 影响
  • Anonymous: :?: :razz: :sad:
  • Anonymous: 牛
  • Anonymous: 楼主你好,我偶尔也会 遇到Reconnect due to socket error: java.nio.channels.ClosedCha...
  • Anonymous: sdfs
  • Anonymous: :arrow: :neutral: :cry:
  • Anonymous: java.io.NotSerializableExcepti on: DStream checkpointing has been enabled but the DStreams with their...
  • wick: HI,请问一下,U,S,V得到 ,怎么得到近似矩阵 (用spark java),谢谢。
  • Michael Whitaker: Thank you for this blog, it was very helpful in troubleshooting my own issues. It seems that no...
  • Anonymous: :mad:
  • Anonymous: :???:
  • Anonymous: :mad: :mad: :mad:
  • 洋流: 哥们,我问个问题,你 把testOnborrow去掉了。。 如果得到的jedis资源...
  • 洋流: 哥们,我问个问题,你 把testOnborrow去掉了。。 如果得到的jedis资源...
  • Anonymous: :razz: :evil: :grin:
  • 张瑞昌: 有很多,比较常见的是 Jacob迭代法,一次迭代O (n^3),迭代次数不清楚 ...
  • Anonymous: :mrgreen:
  • lc277: 你好 我想问下一般删除节点 要多久,要删除的datano de大概用了1t,解除...
  • Anonymous: 你好 我想问下一般删除节点 要多久,要删除的datano de大概用了1t,解除...