今天做leetcode题目简化路径用到了split函数,本以为调用一下就能以"/"分割,但是结果一直不满意,debug之后才发现有很多空字符串。
String str = "/a//bc/d//././/..";
String [] strArray = str.split("/");
for(int i = 0; i < strArray.length; i++) {
System.out.println( i + strArray[i]);
}
结果如下:
0
1a
2
3b
4
5
6
7c
8d
9
10.
11.
12
13..
其中多了很多空字符串第0,2行等等。
其实也不难看出在"/a//bc/d//././/.."它是以开头空为开始,"_/a/_/b/_/_/_/c/d/_/././_/.."(_代表空格) 所以之后再使用的时候要判断分割后的字符串长度是不是0从而判断是不是空。
拓展:limit参数的用法
public String[] split(String regex)//默认为0
public String[] split(String regex, int limit)
该参数用于控制匹配的次数. public String[] split(String regex)为limit为0的情况.
limit > 0 : 最多匹配limit-1次,得到一个长度为limit的数组. String[limit-1]为余下未匹配的字符串
limit = 0 : 尽可能的多匹配, 且长度无限制, 但结尾空字符串将被丢弃
limit < 0 : 尽可能的多匹配, 且长度无限制。
待补充,split函数的原理即源码是如何基于正则表达式的以及转义字符串如何使用。