static boolean regionMatches ( final CharSequence cs , final boolean ignoreCase , final int thisStart , final CharSequence substring , final int start , final int length ) { if ( cs instanceof String && substring instanceof String ) { return ( ( String ) cs ) . regionMatches ( ignoreCase , thisStart , ( String ) substring , start , length ) ; } int index1 = thisStart ; int index2 = start ; int tmpLen = length ; // Extract these first so we detect NPEs the same as the java.lang.String version final int srcLen = cs . length ( ) - thisStart ; final int otherLen = substring . length ( ) - start ; // Check for invalid parameters if ( thisStart < 0 || start < 0 || length < 0 ) { return false ; } // Check that the regions are long enough if ( srcLen < length || otherLen < length ) { return false ; } while ( tmpLen -- > 0 ) { final char c1 = cs . charAt ( index1 ++ ) ; final char c2 = substring . charAt ( index2 ++ ) ; if ( c1 == c2 ) { continue ; } if ( ! ignoreCase ) { return false ; } // The same check as in String.regionMatches(): if ( Character . toUpperCase ( c1 ) != Character . toUpperCase ( c2 ) && Character . toLowerCase ( c1 ) != Character . toLowerCase ( c2 ) ) { return false ; } } return true ; }
Green implementation of regionMatches .