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

Java 的 split 方法为什么要把后面的空字符串丢弃掉?

  •  
  •   zsdroid · 47 天前 · 2099 次点击
    这是一个创建于 47 天前的主题,其中的信息可能已经有所发展或是发生改变。
    String a = "1,2,3,,,,,";
    System.out.println(a.split(",").length);//3
    
    第 1 条附言  ·  47 天前

    我知道第二个参数传-1,可以解决。

    我的意思是,这个api为什么要这样设计?就像5楼所说的,不觉得反人类吗?

    我在stackoverflow上只找到了一句话 该做法抄自Perl

    12 回复  |  直到 2019-12-09 23:47:47 +08:00
    ymmud
        1
    ymmud   47 天前
    split(",", -1);
    lihongjie0209
        3
    lihongjie0209   47 天前
    你确定是
    这个空字符串“ ”

    还是这个空字符串 “”
    Rwing
        4
    Rwing   47 天前
    C# 欢迎您 :)
    https://docs.microsoft.com/zh-cn/dotnet/api/system.string.split?view=netcore-3.0#System_String_Split_System_String___System_StringSplitOptions_

    参数
    separator
    String[]
    分隔此字符串中子字符串的字符串数组、不包含分隔符的空数组或 null。
    options
    StringSplitOptions
    要省略返回的数组中的空数组元素,则为 RemoveEmptyEntries ;要包含返回的数组中的空数组元素,则为 None。
    conn4575
        5
    conn4575   47 天前 via Android
    java 的 split 和其他语言的很不一样,各种反直觉,不知道设计者怎么想的
    gaius
        6
    gaius   47 天前
    用 guava 的 splitter
    qwerthhusn
        7
    qwerthhusn   47 天前
    从来不用这个,而且这个方法的参数是一个正则表达式,比如"1.2.3.4".split(".")是得不到结果的,必须要 split("\\.")
    都是用 Guava 的 Splitter,可以明确指定按子串分割,按字符分割或者按正则分割。而且结果的话可以选择过滤或者不过滤空串
    lxk11153
        8
    lxk11153   47 天前
    感觉这个方法源码不难懂,看下就行了
    annielong
        9
    annielong   47 天前
    感觉挺好,不用再处理空字符,感觉用 split 的场景大多数是只要非空字符的
    ragnaroks
        10
    ragnaroks   47 天前
    没有 java 的反人类如何衬托出其他语言的优雅..
    watzds
        11
    watzds   47 天前 via Android
    很奇怪的设计,好像后面的会丢掉,前面的会留着

    ,,1,2,3,,
    watzds
        12
    watzds   47 天前 via Android
    @annielong 其他位置还是会有空的
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1038 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 24ms · UTC 17:51 · PVG 01:51 · LAX 09:51 · JFK 12:51
    ♥ Do have faith in what you're doing.