Java split字符串分割問題

Java使用split分割字符串時需要注意如下問題

1. 分隔符使用特殊字符

String str = "1|2|3|4";
String[] arr = str.split("\\|");
System.out.println(Arrays.toString(arr));

jdk doc中說明

public String[] split(String regex)

Splits this string around matches of the given regular expression. 

參數regex是一個regular-expression的匹配模式而不是一個簡單的String,他對一些特殊的字符可能會出現你預想不到的結果:

1) 用豎線 | 分隔字符串,你將得不到預期的結果。

2) 用 * 分隔字符串運行將拋出java.util.regex.PatternSyntaxException異常,用加號 + 也是如此。

顯然,| + * 不是有效的模式匹配規則表達式,用"\\*" "\\+"轉義後即可得到正確的字符串結果。

"|" 分隔串時雖然能夠執行,但是卻不是預期的目的,得到的是每個字符的分割,而不是字符串,"\\|"轉義後即可得到正確的字符串結果。


2. split丟失結尾空字符串的問題

String str = "1||3|";
String[] arr = str.split("\\|");

這樣得到的字符串的長度爲3,結尾的空字符串被丟棄了。

使用該函數的另外一個重載方法

String str = "1|2|3|";
String[] arr = str.split("\\|", -1);

public String [] split (String  regex, int limit) 看下說明

limit參數控制模式應用的次數,因此影響所得數組的長度。

如果該限制n大於0,則模式將被最多應用n-1次,數組的長度將不會大於n,而且數組的最後一項將包含所有超出最後匹配的定界符的輸入。

如果n爲非正,那麼模式將被應用儘可能多的次數,而且數組可以是任何長度。

如果n爲0,那麼模式將被應用儘可能多的次數,數組可以是任何長度,並且結尾空字符串將被丟棄。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章