美文网首页
Java中的Split之坑

Java中的Split之坑

作者: 鬼马双星 | 来源:发表于2017-09-24 11:02 被阅读0次

    String有个方法split是用来拆分字符串的,下面开始讨论着字符串有哪些坑。下面正对Java做几个实验,采用工具jshell

    命令 输出结果
    jshell> "a,b,c".split(",") $1 ==> String[3] { "a", "b", "c" }
    jshell> "a,b,".split(",") $2 ==> String[2] { "a", "b" }
    jshell> "a,,c".split(",") $3 ==> String[3] { "a", "", "c" }
    jshell> ",b,c".split(",") $4 ==> String[3] { "", "b", "c" }
    jshell> ",b,".split(",") $5 ==> String[2] { "", "b" }
    ",,a,,b,,".split(",") $6 ==> String[5] { "", "", "a", "", "b" }
    jshell截图

    从上面的实验中,我们先假设逗号之间或者与开头或结尾之间拆分出来的是空字符串,我们会发现一个规律,拆分结果末尾的所有空字符串都被砍掉,而开头的和中间的不会被砍掉。为了证明我们的结论是否正确,我们看看源码是怎么写的。

    // Construct result
    int resultSize = matchList.size();
    if (limit == 0)
        while (resultSize > 0 && matchList.get(resultSize-1).equals(""))
            resultSize--;
    String[] result = new String[resultSize];
    return matchList.subList(0, resultSize).toArray(result);
    

    从while子句中可以看出来,原来砍掉后面的空格是特意要这么做的啊,倒着往前删,连续的空串都去掉。不知道为什么要这样做,但这很容易给缺乏经验的人造成坑!那么从JavaScript里看看是不是也这样呢,我们再做做实验。我们采用jrunscript工具

    命令 输出结果
    nashorn> ",,b,,b,,".split(",") [object Array]
    ",,b,,c,,".split(",").length 7
    nashorn> ",,b,,c,,".split(",").toString() ,,b,,c,,
    jrunscript截图

    看来js和java还是有很大不同的。js并不会砍掉末尾的空串,而是有多少算多少,都装到数组里。

    相关文章

      网友评论

          本文标题:Java中的Split之坑

          本文链接:https://www.haomeiwen.com/subject/lnkkextx.html