1. 程式人生 > >.Net轉Java.06.字符串的split的區別

.Net轉Java.06.字符串的split的區別

-c pty fff 次數 strings 則表達式 public 數組元素 class

在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投訴了。。。

.Net轉Java.06.字符串的split的區別