黑马程序员技术交流社区
标题:
split 方法疑问
[打印本页]
作者:
邱成
时间:
2012-9-22 22:04
标题:
split 方法疑问
本帖最后由 邱成 于 2012-9-24 22:39 编辑
import java.util.*;
public class S{
public static void main(String[] args){
String s = "boo:and:foo";
System.out.println(Arrays.toString(s.split("o",-1)));
}
}
输出结果为:"b", "", ":and:f", "", ""
为什么b后面两个o,只有一个空字符串,而f后面两个o确有两个空字符串的输出!是不是split在字符串结尾匹配的时候又做了什么?
作者:
程振
时间:
2012-9-22 23:34
在eclipse中使用F3查看源码
// Pattern.class中发现下面代码,input="boo:and:foo"; limit=-1
public String[] split(CharSequence input, int limit) {
int index = 0;
boolean matchLimited = limit > 0;
ArrayList<String> matchList = new ArrayList<String>();
Matcher m = matcher(input);
// Add segments before each match found
while(m.find()) {
if (!matchLimited || matchList.size() < limit - 1) {
String match = input.subSequence(index, m.start()).toString();
matchList.add(match);
index = m.end();
} else if (matchList.size() == limit - 1) { // last one
String match = input.subSequence(index,
input.length()).toString();
matchList.add(match);
index = m.end();
}
}
// If no match was found, return this
if (index == 0)
return new String[] {input.toString()};
// Add remaining segment; 注意这句,虽然此时index=input.length()但是,条件依然成立
// 所以就会出现后面多一个空字符串的现象
if (!matchLimited || matchList.size() < limit)
matchList.add(input.subSequence(index, input.length()).toString());
// Construct result
int resultSize = matchList.size();
if (limit == 0)
while (resultSize > 0 && matchList.get(resultSize-1).equals(""))
resultSize--;
String[] result = new String[resultSize];
return matchList.subList(0, resultSize).toArray(result);
}
复制代码
作者:
赵永康
时间:
2012-9-23 00:08
import java.util.*;
public class S{
public static void main(String[] args){
String s = "boo:and:foo";
System.out.println(Arrays.toString(s.split("o",-1)));
}
}
关于你这个问题,我经过了多次的验证得到了一下的结论:
当调用字符串的split方法时候,在字符串中"boo:and:foo";
如果,只有一个满足条件的会直接会从其中切开,如果有连续满足的就如你切oo,虚拟机就会根据连续满足条件的字符的位置不同而进行相应的切割
如果连续满足条件的在字符串的开始或者结尾处,他就会将满足条件的所有字符全部都切走,并且赋值其元素为null,有几个满足条件的就会留几个null.
如果连续满足条件的在字符串中,java虚拟机就会切走一个,将剩下的赋值为null。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2