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 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); }
/** * Asserts that another number can be found in {@code text} starting at {@code index}, and that * its corresponding range is {@code [start, end)}. */ private void assertEqualRange(CharSequence text, int index, int start, int end) { CharSequence sub = text.subSequence(index, text.length()); Iterator<PhoneNumberMatch> matches = phoneUtil.findNumbers(sub, RegionCode.NZ, Leniency.POSSIBLE, Long.MAX_VALUE).iterator(); assertTrue(matches.hasNext()); PhoneNumberMatch match = matches.next(); assertEquals(start - index, match.start()); assertEquals(end - index, match.end()); assertEquals(sub.subSequence(match.start(), match.end()).toString(), match.rawString()); }