首先,我自己想了一些方法,首先我要循环源[]并在其中找到目标[0]的位置。
然后将此位置的索引(假如此值为i)记录下来,之后开始找源[i + 1] == target [1]?然后一直比下去,如果不相等那么继续下一次循环,此次索引清零,若一直都是相等的,那么最后返回i;
粘贴下自己改装的简单代码:
/**
* 写一个简单的替代String.indexof() 方法
*
* @param source
* @param target
* @return
*/
static int indexOf(char[] source, char[] target) {
// 准备数据
int sourceCount = source.length;
int targetCount = target.length;
if (targetCount == 0) {
return 0;
}
// first初始化为target[偏移量] 不指定为0 也就是target[0]
char first = target[0];
// 最大值为sourceCount - targetCount + soure偏移量 例如 若 [a,b,c] [a] 最大值为 2
int max = (sourceCount - targetCount);
// 循环source偏移量 + 开始匹配的位置 小于最小值
for (int i = 0; i <= max; i++) {
/* Look for first character. */
// 判断如果 first 也就是 target[0] 判断是否能够匹配 如果不能那么 使i++ 但不大于max 并且 source[i] != first
if (source[i] != first) {
while (++i <= max && source[i] != first) ;
}
// 若第一个字符匹配成功 接下来的如何匹配
// 第一个字符已经匹配成功那么 i其实是第一个字符的匹配位置 所以开始匹配第二个字符的匹配
// 然后使用for循环判断是否接下来的字符是否匹配 如果不匹配 那么 j就不会一直循环到 end 结束位置
// 如果j == end 则返回 i 的偏移量
if (i <= max) { // [a,b,v,c,d,w,r] [v,c]
int j = i + 1;
int end = j + targetCount - 1; // end = 此索引位 + targetCount的长度
for (int k = 1; j < end && source[j] == target[k]; j++, k++);
if (j == end) {
/* Found whole string. */
return i;
}
}
}
return -1;
}
}