如题,这是代码:
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
String类下的split方法,我截取完字符串后把结果复制给一个数组这个数组长度会加1?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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吧。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
- ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
- ¥20 有关区间dp的问题求解
- ¥15 多电路系统共用电源的串扰问题
- ¥15 slam rangenet++配置
- ¥15 有没有研究水声通信方面的帮我改俩matlab代码
- ¥15 ubuntu子系统密码忘记
- ¥15 保护模式-系统加载-段寄存器
- ¥15 电脑桌面设定一个区域禁止鼠标操作
- ¥15 求NPF226060磁芯的详细资料