.Net轉Java.06.字符串的split的區別
阿新 • • 發佈:2018-01-12
-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的區別