MaiTianChen 2014-10-22 14:29 采纳率: 100%
浏览 4633
已采纳

String类下的split方法,我截取完字符串后把结果复制给一个数组这个数组长度会加1?

如题,这是代码:
String s = "A1B2C3D4E5F6G7H8";
String[] b = new String[8];
System.out.println("b:" + b.length);
b = s.split("[A-Z]");
System.out.println("b:" + b.length);
输出结果就是:
b:8
b:9

  • 写回答

2条回答

  • three_man 2014-10-23 06:18
    关注

    不是数组长度加1,是这个引用指向了新的数组。其相当于。
    String[] b = new String[8];

    b = new String[9];

    你又赋了一遍值。

    基于你又问的问题哈。为什么第一个是空,你的这段代码在JDK中的实现如下:
    String s = "A1B2C3D4E5F6G7H8";
    Pattern p = Pattern.compile("[A-Z]");
    Matcher m = p.matcher(s);

        int index = 0;
        ArrayList<String> matchList = new ArrayList<String>();
        boolean matchLimited = false;
        while(m.find()) {
            String match = s.subSequence(index, m.start()).toString();
            matchList.add(match);
            index = m.end();
        }
        String[] b = null;
        // Add remaining segment
        if (!matchLimited || matchList.size() < 0)
            matchList.add(s.subSequence(index, s.length()).toString());
    
        // Construct result
        int resultSize = matchList.size();
        while (resultSize > 0 && matchList.get(resultSize-1).equals("")){
            resultSize--;
        }
        String[] result = new String[resultSize];
        b = matchList.subList(0, resultSize).toArray(result);
    
        System.out.println("b0:" + b[0]);
    

    使用的正则表达式。
    然后用一个ArrayList来保存匹配到的字符。
    有这样一段:String match = s.subSequence(index, m.start()).toString();
    给list中的第一个元素赋的值为从0开始从匹配字符的开始位结束,就也是0了。所以list中的第一个元素就是空的。

    后面还有一段:
    while (resultSize > 0 && matchList.get(resultSize-1).equals("")){
    resultSize--;
    }
    这一段把尾部的所有为空的都去除了,但是没有去除首部的,因此list中的第一个还是空。
    最后转化为数组的时候第一个元素就是空了。

    个人认为这个可以算JDK的一个小bug吧。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题