我想知道系统的 string.indexof(string value,int startIndex) 具体是怎么实现的呢?谁能说下简单的代码@#!

解决方案 »

  1.   

    看String类的源码
        public int indexOf(String str, int fromIndex) {
            return indexOf(value, offset, count,
                           str.value, str.offset, str.count, fromIndex);
        }    /**
         * Code shared by String and StringBuffer to do searches. The
         * source is the character array being searched, and the target
         * is the string being searched for.
         *
         * @param   source       the characters being searched.
         * @param   sourceOffset offset of the source string.
         * @param   sourceCount  count of the source string.
         * @param   target       the characters being searched for.
         * @param   targetOffset offset of the target string.
         * @param   targetCount  count of the target string.
         * @param   fromIndex    the index to begin searching from.
         */
        static int indexOf(char[] source, int sourceOffset, int sourceCount,
                           char[] target, int targetOffset, int targetCount,
                           int fromIndex) {
    if (fromIndex >= sourceCount) {
                return (targetCount == 0 ? sourceCount : -1);
    }
         if (fromIndex < 0) {
             fromIndex = 0;
         }
    if (targetCount == 0) {
        return fromIndex;
    }        char first  = target[targetOffset];
            int max = sourceOffset + (sourceCount - targetCount);        for (int i = sourceOffset + fromIndex; 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 = targetOffset + 1; j < end && source[j] == 
                             target[k]; j++, k++);                if (j == end) {
                        /* Found whole string. */
                        return i - sourceOffset;
                    }
                }
            }
            return -1;
        }
      

  2.   

    摘自中文JDK~~
    indexOf
    public int indexOf(String str,
                       int fromIndex)从指定的索引处开始,返回第一次出现的指定子字符串在此字符串中的索引。返回的整数是最小值 k,它满足: 
         k >= Math.min(fromIndex, str.length()) && this.startsWith(str, k)
     如果不存在这样的 k 值,则返回 -1。 参数:
    str - 要搜索的子字符串。
    fromIndex - 开始搜索的索引位置。 
    返回:
    从指定的索引处开始,返回第一次出现的指定子字符串在此字符串中的索引。