java詭異的String.split()方法

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的用法:

  1. 正數:匹配符最多被用limit-1次
  2. 0:匹配符可以用任意多次,但是最後被匹配出來的空串會被省去
  3. 負數:匹配符可以用任意多次

舉例:
“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()一下。

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