java indexof 源码_java String indexof 的jdk源码实现

public int indexOf(String str, int fromIndex) {

return indexOf(value, offset, count,

str.value, str.offset, str.count, fromIndex);

}

/**

* 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) {//开始出小于0,则从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;

}

public int indexOf(String str, int fromIndex) { return indexOf(value, offset, count, str.value, str.offset, str.count, fromIndex); } /** * 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) {//开始出小于0,则从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; }
经验分享 程序员 微信小程序 职场和发展