zoukankan      html  css  js  c++  java
  • .Net转Java.06.字符串的split的区别

    在Java遇到了将类似“1|2|3|4”的字符串分隔为数组的功能

    这种问题能难倒有着十多年开发经验的的.NET码农?

            // Java代码
            String s="1|2|3";
            String[] array=s.split("|");   

    结果,出来的数组是这个鬼样子  1,|,2,|,3

    仔细看看split传入的参数名,regex,是正则表达式,恍然大悟,要转义正则表达式……

            // Java代码
            String s="1|2|3";
            String[] array=s.split("\|");

    问题解决后,继续手贱研究这个split,寻找.NET里边我的最爱选项 StringSplitOptions.RemoveEmptyEntries 在哪里?

    索性做个试验

            // Java代码
            String s="1,2,3,,,";
            String[] array=s.split(",");
            // array的结果是1,2,3

    难倒默认带RemoveEmptyEntries功能?

    然后再试。。。

            // Java代码
            String s="1,2,,,3,,,";
            String[] array=s.split(",");
            // "1","2","","","3"

    这结果算什么鬼???舍尾法的RemoveEmptyEntries,自动舍弃尾部空元素?跟.NET的老码农找不到频道啊。。。

    好吧,就算如此,中间的空元素我自己可以过滤,如果我不想舍弃尾部的空元素可又咋整?

    百度了半天,找到了解决方案 ,如果想保留尾部空元素,要传入limit=-1

            // Java代码
            String s="1,2,,,3,,,";
            String[] array=s.split(",",-1); // 传入-1,保留尾部的空元素
            // "1","2","","","3","","",""

     好吧,我继续研究第二个参数limit

    public String[] split(String regex, int limit)

    从字面意思,应该是限制split返回数组元素的个数,

    这个limit的含义倒是跟.NET的count参数非常类似

    // C#代码
    public String[] Split(String[] separator, int count, StringSplitOptions options)

    如果limit或者count=n,表示匹配的次数为n-1

                // C#代码
                String s = "1|2|3|||4";
                String[] array = s.Split(new String[] { "|" }, 2, StringSplitOptions.RemoveEmptyEntries);
                // array的结果为{"1","2|3|||4"}
            // Java代码
            String s="1,2,,,3,,,";
            String[] array=s.split(",",2); 
            // array的结果{"1","2,,,3,,,"}

    看到这里,自以为都搞懂了

    结果下面测试又让我郁闷了

            // Java代码
            String s1="";
            String[] array1=s1.split(",");
            // array1的结果是{""} 数组含1空元素
    
            String s2=",";
            String[] array2=s2.split(",");
            // array2的结果是{} 数组含0元素

    这结果我是真想12315投诉了。。。

  • 相关阅读:
    百度之星资格赛1001——找规律——大搬家
    HDU1025——LIS——Constructing Roads In JGShining's Kingdom
    DP(递归打印路径) UVA 662 Fast Food
    递推DP UVA 607 Scheduling Lectures
    递推DP UVA 590 Always on the run
    递推DP UVA 473 Raucous Rockers
    博弈 HDOJ 4371 Alice and Bob
    DFS(深度) hihoCoder挑战赛14 B 赛车
    Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 2)
    DP(DAG) UVA 437 The Tower of Babylon
  • 原文地址:https://www.cnblogs.com/wormday/p/8059742.html
Copyright © 2011-2022 走看看