首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  Java

Java 有没有像 Python 一样的 split?

  •  
  •   anzu · 148 天前 · 1746 次点击
    这是一个创建于 148 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    >>> "   ".split(" ")
    ['', '', '', '']
    
    10 回复  |  直到 2019-05-29 09:14:15 +08:00
        1
    Luckyray   148 天前   ♥ 1
    " ".split("\\ ",Integer.MAX_VALUE)这样可以。
        2
    qwerthhusn   148 天前
    用 Guava 的`com.google.common.base.Splitter.on(' ')`,String 的 split 接收的是一个正则表达式,有时在特殊字符条件下会用错。而 Guava 的那个完全就是按照字符去分,而且还跟你选项要不要把空串过滤掉,以及要不要对分割开的结果做 trim
        3
    kcirtap   148 天前 via iPhone
    查一下 google 很难吗
        4
    palmers   148 天前
    //4 个空格
    String blank = " ";
    String[] split = blank.split("", 4);
        5
    Cbdy   148 天前 via Android
    有的
        6
    c4f36e5766583218   148 天前   ♥ 1
    有的,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) 参数是一个正则字符串
        7
    c4f36e5766583218   148 天前
    resultSize--;是在 java.lang.String#split(regex, limit) limit==0 才生效,所以可以 input.split(" ", Integer.MAX_VALUE)
        8
    c4f36e5766583218   148 天前
    因 String#split 参数是一个正则字符串,如果你要按"abc"来分割会走到 Pattern#split,用正则来分割性能是没有纯字符处理方法快的,所以还是 commons-lang3/Guava 来处理比较好,比较一般项目都会用到这两个 jar/之一
        9
    fzy0728   148 天前
        10
    tairan2006   147 天前 via Android
    谷歌一下很难么 还专门发帖
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1242 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 24ms · UTC 17:54 · PVG 01:54 · LAX 10:54 · JFK 13:54
    ♥ Do have faith in what you're doing.