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,那麼模式將被應用儘可能多的次數,數組可以是任何長度,並且結尾空字符串將被丟棄。