public String [ ] split ( CharSequence input , int limit ) { String [ ] fast = fastSplit ( pattern , input . toString ( ) , limit ) ; if ( fast != null ) { return fast ; } int index = 0 ; boolean matchLimited = limit > 0 ; ArrayList < String > matchList = new ArrayList <> ( ) ; 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 ) ; }
Splits the given input sequence around matches of this pattern .