Java 有没有像 Python 一样的 split?

2019-05-28 17:12:26 +08:00
 anzu

比如分割空格字符串,python 是几个空字符串组成的数组,而 java 是空数组

>>> "   ".split(" ")
['', '', '', '']
2941 次点击
所在节点    Java
10 条回复
Luckyray
2019-05-28 17:16:33 +08:00
" ".split("\\ ",Integer.MAX_VALUE)这样可以。
qwerthhusn
2019-05-28 17:44:07 +08:00
用 Guava 的`com.google.common.base.Splitter.on(' ')`,String 的 split 接收的是一个正则表达式,有时在特殊字符条件下会用错。而 Guava 的那个完全就是按照字符去分,而且还跟你选项要不要把空串过滤掉,以及要不要对分割开的结果做 trim
kcirtap
2019-05-28 17:50:34 +08:00
查一下 google 很难吗
palmers
2019-05-28 18:44:57 +08:00
//4 个空格
String blank = " ";
String[] split = blank.split("", 4);
Cbdy
2019-05-28 18:48:17 +08:00
有的
c4f36e5766583218
2019-05-28 18:54:22 +08:00
有的,java 自带的不清楚。常用的第三方 jar 有
org.apache.commons.lang3.StringUtils#splitPreserveAllTokens(str, separatorChar)
org.apache.commons.lang3.StringUtils#splitByWholeSeparatorPreserveAllTokens(str, separator)
或者 Guava(自己查)

以 jdk8 源码来看,String#split 里分两类一个是 fastpath 快速分割,另一个就是 Pattern#split... 两类方法都有 resultSize--;这样的一段代码,原来循环剔除末尾空字符串。所以就产生了 lz 的结果。
注意: java.lang.String#split(regex) 参数是一个正则字符串
c4f36e5766583218
2019-05-28 19:00:59 +08:00
resultSize--;是在 java.lang.String#split(regex, limit) limit==0 才生效,所以可以 input.split(" ", Integer.MAX_VALUE)
c4f36e5766583218
2019-05-28 19:06:49 +08:00
因 String#split 参数是一个正则字符串,如果你要按"abc"来分割会走到 Pattern#split,用正则来分割性能是没有纯字符处理方法快的,所以还是 commons-lang3/Guava 来处理比较好,比较一般项目都会用到这两个 jar/之一
fzy0728
2019-05-28 20:46:35 +08:00
tairan2006
2019-05-29 09:14:15 +08:00
谷歌一下很难么 还专门发帖

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/568469

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX