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

Java 有没有像 Python 一样的 split?

  •  
  •   anzu · 2019-05-28 17:12:26 +08:00 · 3090 次点击
    这是一个创建于 2042 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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