为什么在这段代码中我不能使indexOf()等于0以外的任何值?

时间:2018-11-14 04:26:35

标签: java iteration indexof anagram

我的主要目标是每次在要搜索的单词中未找到字母时,为-1取一个indexOf的值。我可以使用该值来确定单词是否是否为anagrams。但是,问题是我不断得到0的{​​{1}}。如果字母完全不同,我不应该得到indexOf吗?。

-1

2 个答案:

答案 0 :(得分:1)

更改为

String letter = b.substring(i,i + 1);

另请参阅post increment operator java

顺便说一下,相等大小的字符串并不意味着它们是字谜

答案 1 :(得分:0)

回答为何无法从indexOf()获得0以外的任何东西:

在此语句中,String letter = b.substring(i,i++); 假设您正在for循环中进行第二次迭代(即i = 2)。 您已经使用了后递增运算符,这意味着首先执行该语句,然后将该值递增。

在这种情况下,b.substring(i,i++);解析为b.substring(2,2); 你会得到String letter = ""

根据indexOf()的实现,任何字符串中的索引“”都将返回0,这是您的逻辑目的遭到破坏的地方。

出于理解目的,我将从String.java类粘贴indexOf()的实现:

/**
 * 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;
}

targetCount为0,并且代码中返回0。