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

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

  •  
  •   zsdroid · 2019-12-09 16:41:16 +08:00 · 4101 次点击
    这是一个创建于 1822 天前的主题,其中的信息可能已经有所发展或是发生改变。
    String a = "1,2,3,,,,,";
    System.out.println(a.split(",").length);//3
    
    第 1 条附言  ·  2019-12-09 17:32:18 +08:00

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

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

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

    12 条回复    2019-12-09 23:47:47 +08:00
    ymmud
        1
    ymmud  
       2019-12-09 16:42:19 +08:00
    split(",", -1);
    xtreme1
        2
    xtreme1  
       2019-12-09 16:43:25 +08:00   ❤️ 1
    lihongjie0209
        3
    lihongjie0209  
       2019-12-09 16:43:52 +08:00
    你确定是
    这个空字符串“ ”

    还是这个空字符串 “”
    Rwing
        4
    Rwing  
       2019-12-09 16:49:26 +08:00
    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  
       2019-12-09 16:54:19 +08:00 via Android
    java 的 split 和其他语言的很不一样,各种反直觉,不知道设计者怎么想的
    gaius
        6
    gaius  
       2019-12-09 17:06:40 +08:00
    用 guava 的 splitter
    qwerthhusn
        7
    qwerthhusn  
       2019-12-09 17:11:46 +08:00
    从来不用这个,而且这个方法的参数是一个正则表达式,比如"1.2.3.4".split(".")是得不到结果的,必须要 split("\\.")
    都是用 Guava 的 Splitter,可以明确指定按子串分割,按字符分割或者按正则分割。而且结果的话可以选择过滤或者不过滤空串
    lxk11153
        8
    lxk11153  
       2019-12-09 17:16:15 +08:00
    感觉这个方法源码不难懂,看下就行了
    annielong
        9
    annielong  
       2019-12-09 18:00:01 +08:00
    感觉挺好,不用再处理空字符,感觉用 split 的场景大多数是只要非空字符的
    ragnaroks
        10
    ragnaroks  
       2019-12-09 23:03:58 +08:00
    没有 java 的反人类如何衬托出其他语言的优雅..
    watzds
        11
    watzds  
       2019-12-09 23:46:38 +08:00 via Android
    很奇怪的设计,好像后面的会丢掉,前面的会留着

    ,,1,2,3,,
    watzds
        12
    watzds  
       2019-12-09 23:47:47 +08:00 via Android
    @annielong 其他位置还是会有空的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3554 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 11:03 · PVG 19:03 · LAX 03:03 · JFK 06:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.