发布网友 发布时间:2023-05-25 16:54
共3个回答
热心网友 时间:2024-12-05 11:32
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)因此结果为[, *, , , 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-12-05 11:32
这个空格是 Arrays中toString() 中带的。。
给你看下源码就知道了!
public static String toString(Object[] a) {
热心网友 时间:2024-12-05 11:33
会不会是下面设置的遇到1就转换成,啊。我记得i18n国际化有这个功能。。