在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);
- }
复制代码 |