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