问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java.lang.String的split()方法问题

发布网友 发布时间: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)
            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-12-05 11:32

这个空格是 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(", ");
        }
    }

热心网友 时间:2024-12-05 11:33

会不会是下面设置的遇到1就转换成,啊。我记得i18n国际化有这个功能。。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
招商银行的美元天添金怎么样? 天添美蒸馒头为什么开裂呢 上海食堂送菜 邮政跨地区取款手续费多? 谁能告诉我邮政储蓄卡跨省取钱要不要收费啊? 自贡市龙盛世纪仿真模型制造有限公司公司简介 学PS真的很难吗 红烧萝卜牛筋 微信怎么转发公众号部分内容 转发公众号部分内容方法 微信公众号内的视频如何下载?一个F12搞定 ...ty_str_split := ty_str_split ();这个是什么意思?有什么作用?小弟... java初学,想问个问题,下面这段代码里面有两个return分别是什么意思 return s.split('').map(x=>{return x*1;}).reduce((x,y)=>{return... 膝关节置换影像学判断是磁共振还是X光片? 融资性租入固定资产会计怎么做账?会计分录怎么做? 杨紫的《余生》为什么不能开播? 余生,请多指教什么时候播出? 余生请多指教看电影是哪一集 水环真空泵的基本类型与优点? 天下多奇才.猜数字几? ETC卡里的钱取出方法? 继续教育专项附加扣除怎么填 读函授可以专项附加扣除吗 复方精油可以每天用吗 鬼灭之刃红莲华歌词 红莲华歌词是什么? 开卷的词语开卷的词语是什么 小孩冬天发烧、感冒咳嗽能喝冰糖雪梨水吗? 墨沈[mò shěn]什么意思?近义词和反义词是什么?英文翻译是什么? 宝宝发烧,能喝冰糖和梨煮水吗 王者荣耀云中君技能是什么 王者荣耀云中君技 导致婴儿缺氧是什么原因 中职教师有编制吗 职高老师有编制吗 麻烦到二哥了,谢谢。早点休息!四川话怎么说? 《三国演义》中蜀兵是啥意思? 有机肥可以完全替代化肥吗?为什么 有机肥可以代替化肥使用吗?一吨有机肥能代替多少化肥呢? 有机肥真的可以代替化肥吗 “问天”成功进入轨道,代表中国人能在太空大规模做实验了吗?_百度知 ... 问天实验舱成功发射!此次成功发射有什么意义? 信贷辅导员解决的问题 大学的辅导员是干什么的? ...参考文献后经常会出现(完整的)或(缺卷的)。请问,这是什么意思... 患者恶寒发热,无汗,头痛,身痛,喘咳,舌苔薄白,脉浮紧。其证候是_百度知... 感冒,恶寒较甚,头痛鼻塞,身楚倦怠,无汗,咳嗽、咳痰无力,舌淡,苔白... 患者,男,18岁。恶寒发热,头痛身痛,无汗而喘,舌苔薄白,脉浮紧。治疗应... 外感风寒湿邪,症见恶寒发热、无汗、头痛项强,肢体酸楚疼痛、口苦而渴... 治疗外感风寒夹湿所致的感冒,症见恶寒、发热、无汗、头重而痛、肢体酸痛... 某男,55岁。恶寒发热,无汗,头身痛,伴有形寒肢冷,面白声微;舌淡苔白...