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都是這麼實現的。這幾個版本的回答不須要猶豫。算法