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