java String,indexOf() 方法源码解析
首先,我自己想了一些方法,首先我要循环源[]并在其中找到目标[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; } }
上一篇:
IDEA上Java项目控制台中文乱码