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()一下。

猜你喜欢

转载自blog.csdn.net/qq_40136685/article/details/106325120