2024-06-29 02:13:38
split 参数是个正则表达式.
如果用 patter+matcher去检查, 实际匹配结果如下
0, 1
2, 3
3, 4
4, 5
6, 7
7, 8
8, 9
9, 10
即命中9次.
但从数字3开始后的命中在spit看来都是无效的, 因为截取出来的内容是"", split方法将剔除尾部非空后的所有空格串(0长度). 这个你可以看split源码(Pattern.class) 第 1024行看到.
if (limit == 0)
while (resultSize > 0 && matchList.get(resultSize-1).equals(""))
resultSize--;
/// 就在这里, 尾部的0长度字符串都被剔除了.
String[] result = new String[resultSize];
因此结果为[, *, , , 3] , 命中5次.
so, 有些场合, 这样去split是不合适的.
正确的split调用, 应该这样:
String[] xx = x.split("[1]",-1); //不限制空命中.
这样出来的 xx 的数组, 就是9个. 如下图:
可不可以把源码给我,我做下测试。
附 string.split 和 Pattern, Matcher 测试.
运行结果:
Test1: '1*11131111'.split('1') =
0=[]
1=[*]
2=[]
3=[]
4=[3]
Test2: '1*11131111'.split('[1]') =
0=[]
1=[*]
2=[]
3=[]
4=[3]
Test3: '1*11131111'.split('1',-1) =
0=[]
1=[*]
2=[]
3=[]
4=[3]
5=[]
6=[]
7=[]
8=[]
Test4: Matcher: Pattern.compile('[1]').match('1*11131111') =
0=[0, 1] = 1
1=[2, 3] = 1
2=[3, 4] = 1
3=[4, 5] = 1
4=[6, 7] = 1
5=[7, 8] = 1
6=[8, 9] = 1
7=[9, 10] = 1
2024-06-29 02:43:00
这个空格是 Arrays中toString() 中带的。。
给你看下源码就知道了!
public static String toString(Object[] a) {
if (a == null)
return "null";
int iMax = a.length - 1;
if (iMax == -1)
return "[]";
StringBuilder b = new StringBuilder();
b.append('[');
for (int i = 0; ; i++) {
b.append(String.valueOf(a[i]));
if (i == iMax)
return b.append(']').toString();
//这个append 逗号后面 带了个空格 所以结果是上面的那样
b.append(", ");
}
}
你很细心,但我想问第一个逗号前面的空串怎么来的,谢谢。
split()分割出来的啊 由于分割前面没有字符 就是以空字符串填充啊,有字符 就以字符填充啊
*后面的三个1最后怎么成为了结果的形式?
他忘append 中添加 空串啊 但是 b.append(", "); 会带一个空格的啊。 ,+空串+空格 就是那样的结果啊
2024-06-29 02:39:47