java中String的玩法还真多,本文介绍的的是indexof这个查找字串的实现。java
说到查找子串,最原始的算法就是先找到第一个字符是匹配的,而后从这个字符串开始日后比对,直到和子串彻底匹配。不少人的第一反应确定是这个算法很low,你起码说个KMP什么的才上档次。因此在不少人印象里java定不会用这么low的算法,就算面试被问到,也不敢这么回答,如今你能够大胆说,若是面试官嘲笑你,请用经典名句:Talk is cheap, show me the code。面试
for (int i = sourceOffset + fromIndex; i <= max; i++) { //直到找到第一个匹配的字符 if (source[i] != first) { while (++i <= max && source[i] != first); } //从第一个字符后开始查找 if (i <= max) { //此时i为第一个匹配的字符,j是要开始比对的第二个字符 int j = i + 1; //end是完整匹配最后的字符的位置,targetCount就是子串的长度 int end = j + targetCount - 1; for (int k = targetOffset + 1; j < end && source[j] == target[k]; j++, k++); if (j == end) { //此时查找到,返回结果位置 return i - sourceOffset; } } }
通过验证,1.6,1.7,1.8都是这么实现的。这几个版本的回答不须要犹豫。算法