Reference
https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split(java.lang.String)
正文
先貼函數簽名。
public String[] split(String regex, int limit);
第二個參數可以不傳(被重載),默認是0.
參數limit的用法:
- 正數:匹配符最多被用limit-1次
- 0:匹配符可以用任意多次,但是最後被匹配出來的空串會被省去
- 負數:匹配符可以用任意多次
舉例:
“boo:and:foo”
regex | limit | result |
---|---|---|
o | -1 | { “b”, “”, “:and:f”, “”, “” } |
o | 0 | { “b”, “”, “:and:f” } |
不過還有一個比較詭異的地方。用\s+去匹配是會匹配出空串的。
輸入
String s = " hello world! ";
String[] words = s.split("\\s+", -1);
for (int i = 0; i < words.length; i++)
System.out.print(words[i]+"|");
輸出結果是|hello|world!||
可以看到。前後各有一個空串。我覺得這個是非常不可思議的地方。我之前一直覺得用\s+匹配多個空格,不會出現空token的情況。而且hello和world之間有多個空格,這個是被split完美解決了的。
防止出問題,以後還是多trim()一下。