JDK 소스 코드-String 의 index 해석

String 의 index
    String 의 색인 은 index Of,lastIndex Of 가 있 는데 주로 문자,문자열 을 색인 합 니 다.lastIndexOf(String str,int from Index)를 쓰 려 고 합 니 다.우선 작은 코드 를 보 세 요.여기에 대응 하 는 방법 은 lastIndexOf(String str,int from Index)입 니 다.
public class StringIndexTest {
    public static void main(String args[]) {
        String source = "DuJingDuJingDu";
        String target = "Jing";
        System.out.println("source string is : " + source + "
" + "target string is : " + target); System.out.println("source.lastIndexOf(target, 1) : " + source.lastIndexOf(target, 1)); System.out.println("source.lastIndexOf(target, 2) : " + source.lastIndexOf(target, 2)); System.out.println("source.lastIndexOf(target, 6) : " + source.lastIndexOf(target, 6)); } } /** * Result * source string is : DuJingDuJingDu * target string is : Jing * source.lastIndexOf(target, 1) : -1 * source.lastIndexOf(target, 2) : 2 * source.lastIndexOf(target, 6) : 2 */

코드 에서 다음 과 같은 몇 가 지 를 얻 을 수 있 습 니 다.
1:from Index,즉 제 시 된 색인 값 은 역순 의 색인 값 이 고 lastIndex Of 는 예순 의 방법 으로 검색 한 것 입 니 다.
제2:사례 에서 보 듯 이 사례 에서 source.lastIndex Of(target,2),from Index 는 2 이다.여기 서 target 과 한 글자'J'만 대응 하고 색인 에 성공 할 수 있다.from Index 는 target 첫 글자 의 색인 시작 값 임 을 알 수 있 습 니 다.
다음은 소스 코드 측면 에서 분석한다.lastIndex Of(String str)와 lastIndex Of(String str,int from Index)는 모두 아래 방법 을 인용 하여 본론 으로 들 어 갑 니 다.
static int lastIndexOf(char[] source, int sourceOffset, int sourceCount,
            char[] target, int targetOffset, int targetCount,
            int 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 lastIndexOf(char[] source, int sourceOffset, int sourceCount,
            char[] target, int targetOffset, int targetCount,
            int fromIndex) {
        /*
         * Check arguments; return immediately where possible. For
         * consistency, don't check for null str.
         */
      //         ,fromIndex target            ;
      //  , fromIndex     target     , target         ,      .
        int rightIndex = sourceCount - targetCount;//           
        if (fromIndex < 0) {
            return -1;
        }
        if (fromIndex > rightIndex) {
            fromIndex = rightIndex;//      fromIndex     ,      .
        }
        /* Empty string always matches. */
       //       ,      ,        fromIndex.
        if (targetCount == 0) {
            return fromIndex;
        }

        int strLastIndex = targetOffset + targetCount - 1;//  target     .
        char strLastChar = target[strLastIndex];
        //          ,min       ,i      .
        int min = sourceOffset + targetCount - 1;
        int i = min + fromIndex;

    startSearchForLastChar:
        while (true) {
            while (i >= min && source[i] != strLastChar) {
                i--;//             .
            }
            if (i < min) {
                return -1;
            }
            //    、    ,          .
            int j = i - 1;
            int start = j - (targetCount - 1);
            int k = strLastIndex - 1;

            while (j > start) {
                if (source[j--] != target[k--]) {
                    i--;//              ,         .
                    continue startSearchForLastChar;
                }
            }
            //           ,         ,        .
            return start - sourceOffset + 1;
        }
    }

그림 을 그 리 려 고 했 는데 시간 이 촉박 해서 읽 으 려 는 모든 친구 에 게 죄송합니다.교 류 를 환영 합 니 다.비판 지적 을 환영 합 니 다!

좋은 웹페이지 즐겨찾기