String的indexOf实现

今天看了一下String的indexOf实现,其实实现原理不难,先把String转换为char[],然后首先找到target的的第一个字符开始匹配.

    /**
     * 类似String.indexOf(),不过是针对byte array
     * 
     * @param source
     * @param target
     * @return
     */
    public static int indexOf(byte[] source, byte[] target) {
        int sourceCount = source.length;
        int targetCount = target.length;
        byte first = target[0];
        int max = (sourceCount - targetCount);

        for (int i = 0; i <= max; i++) {
            /* Look for first character. */
            if (source[i] != first) {
                while (++i <= max && source[i] != first)
                    ;
            }

            /* Found first character, now look at the rest of v2 */
            if (i <= max) {
                int j = i + 1;
                int end = j + targetCount - 1;
                for (int k = 1; j < end && source[j] == target[k]; j++, k++)
                    ;

                if (j == end) {
                    /* Found whole string. */
                    return i;
                }
            }
        }
        return -1;
    }

 

隐含的问题: 在一个大数组中寻找一个小数组。

你可能感兴趣的:(indexOf)