.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,是正則表達式,恍然大悟,要轉義正則表達式……spa

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

問題解決後,繼續手賤研究這個split,尋找.NET裏邊個人最愛選項 StringSplitOptions.RemoveEmptyEntries 在哪裏?code

索性作個試驗blog

        // 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的老碼農找不到頻道啊。。。it

好吧,就算如此,中間的空元素我本身能夠過濾,若是我不想捨棄尾部的空元素可又咋整?io

百度了半天,找到了解決方案 ,若是想保留尾部空元素,要傳入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投訴了。。。

相關文章
相關標籤/搜索