jetbrick-commons/src/main/java/jetbrick/lang/StringUtils.java
public static int indexOf(String s, String substr, int startIndex, int endIndex) {
        if (startIndex < 0) {
            startIndex = 0;
        }
        int srclen = s.length();
        if (endIndex > srclen) {
            endIndex = srclen;
        }
        int sublen = substr.length();
        if (sublen == 0) {
            return startIndex > srclen ? srclen : startIndex;
        }

        int total = endIndex - sublen + 1;
        char c = substr.charAt(0);
        mainloop: for (int i = startIndex; i < total; i++) {
            if (s.charAt(i) != c) {
                continue;
            }
            int j = 1;
            int k = i + 1;
            while (j < sublen) {
                if (substr.charAt(j) != s.charAt(k)) {
                    continue mainloop;
                }
                j++;
                k++;
            }
            return i;
        }
        return -1;
    }
public static int indexOf(String s, String substr, int startIndex, int endIndex) {
        if (startIndex < 0) {
            startIndex = 0;
        }
        int srclen = s.length();
        if (endIndex > srclen) {
            endIndex = srclen;
        }
        int sublen = substr.length();
        if (sublen == 0) {
            return startIndex > srclen ? srclen : startIndex;
        }

        int total = endIndex - sublen + 1;
        char c = substr.charAt(0);
        mainloop: for (int i = startIndex; i < total; i++) {
            if (s.charAt(i) != c) {
                continue;
            }
            int j = 1;
            int k = i + 1;
            while (j < sublen) {
                if (substr.charAt(j) != s.charAt(k)) {
                    continue mainloop;
                }
                j++;
                k++;
            }
            return i;
        }
        return -1;
    }
public static int indexOf ( String s , String substr , int startIndex , int endIndex ) { if ( startIndex < 0 ) { startIndex = 0 ; } int srclen = s . length ( ) ; if ( endIndex > srclen ) { endIndex = srclen ; } int sublen = substr . length ( ) ; if ( sublen == 0 ) { return startIndex > srclen ? srclen : startIndex ; } int total = endIndex - sublen + 1 ; char c = substr . charAt ( 0 ) ; mainloop : for ( int i = startIndex ; i < total ; i ++ ) { if ( s . charAt ( i ) != c ) { continue ; } int j = 1 ; int k = i + 1 ; while ( j < sublen ) { if ( substr . charAt ( j ) != s . charAt ( k ) ) { continue mainloop ; } j ++ ; k ++ ; } return i ; } return - 1 ; }
Finds first occurrence of a substring in the given source but within limited range [start, end).
It is fastest possible code, but still original <code>String.indexOf(String, int)</code>
is much faster (since it uses char[] value directly) and should be used when no range is needed.

@param s                source string for examination
@param substr                substring to find
@param startIndex        starting index
@param endIndex                ending index
@return index of founded substring or -1 if substring not found
Finds first occurrence of a substring in the given source but within limited range [ start end ) . It is fastest possible code but still original <code > String . indexOf ( String int ) < / code > is much faster ( since it uses char [] value directly ) and should be used when no range is needed .