今天正则匹配遇到一个问题,就是用\D(非数字)去分割字符串时遇到了麻烦,“ 1 2”(1前面有空格)分割结果会有一个空格(还是空字符?),求解为什么!!!

贴上源码
package 测试;
public class Pattern1 {
String regex="\\D+";
public String [] getString(String str){
return str.split(regex);
}
public static void main(String[] args) {
Pattern1 pa=new Pattern1();
String []str1=pa.getString(" 1 2");
String []str2=pa.getString("1 2 ");
for(int i=0;i<str1.length;i++)
System.out.print("丨"+str1[i]);
System.out.println();
for(int i=0;i<str2.length;i++)
System.out.print("丨"+str2[i]);
}
}
输出结果为:
丨丨1丨2
丨1丨2
------解决思路----------------------
那个是空串,不是空格,可以把分隔符当做一个隔板,示意如下:

所以第一个的结果是"", "1", "2"
按照这个想法,第二个本来应该是 "1","2",""。 但split(reg) 相当于split(reg, limit = 0), limit = 0的意思是删去字符串数组结尾的所有空串,所以第二个的结果就变成了"1", "2"。如果你把第七行改成split(reg, -1), 则第二个的结果就变成了
------解决思路----------------------
1
------解决思路----------------------
2