java中indexOf函数详解
最近在解决android 中listview的查问题,⽤到了indexOf ⽅法,仔细看了下源码,详解如下。
private static int indexOf(String source, String target, int fromIndex) {
final int sourceLength = source.length();
final int targetLength = target.length();
//1、当开始查位置⼤于等于源字符串长度时,如果[查字符串]为空,则:
//返回字符串的长度,否则返回-1.
if (fromIndex >= sourceLength) {
return (targetLength == 0 ? sourceLength : -1);
}
//2、如果fromIndex ⼩于 0,则从 0开始查。
if (fromIndex < 0) {
fromIndex = 0;
}
//3、如果[查字符串]为空,则返回fromIndex
if (targetLength == 0) {
return fromIndex;
}
//4、开始查,从[查字符串]中得到第⼀个字符,标记为first
char first = target.charAt(0);
java中index是什么意思//4.1、计算出源字符串最⼤开始查的位置
int max = (sourceLength - targetLength);
/
/4.2、遍历查
for (int i = fromIndex; i <= max; i++) {
/* Look for first character. */
//4.2.1、从[源字符串]中,查到⽬标字符串每个字母的 first 的位置,不到直接返回-1结束
if (source.charAt(i)!= first) {
while (++i <= max && source.charAt(i) != first);
}
/* Found first character, now look at the rest of v2 */
//4.2.2、如果在[源字符串]中,到⾸个[⽬标字符串],则开始匹配整个[⽬标字符串]
if (i <= max) {
//4.2.2.1、得到下⼀个要匹配的位置,标记为j
int j = i + 1;
//4.2.2.2、得到其余[⽬标字符串]的长度,标记为end,当j=end时表⽰⽬标字符串匹配完成
int end = j + targetLength - 1;
//4.2.2.3、遍历,其余[⽬标字符串],从k开始,
//如果j不越界(⼩于end,表⽰:其余[⽬标字符串]的范围),
//同时[源字符串]==[⽬标字符串],则
//⾃增,继续查匹配。直⾄完成所有匹配
for (int k = 1; j < end && source.charAt(j)== target.charAt(k); j++, k++);
//4.2.2.4、如果j与end相等,则表⽰:
//源字符串中匹配到⽬标字符串,匹配结束,返回i。
if (j == end) {
/
* Found whole string. */
return i;
}
}
}
//其余情况,返回-1.表⽰没有匹配到⽬标字符串
return -1;
}
⼀、indexOf函数简介
indexOf是String.java中的⼀个⽅法,⽤于返回[⽬标字符串]在[源字符串]中的位置。
1、indexOf:返回特定⼦字符串第⼀次在源字符串中的位置。如果源字符中不存在⽬标字符,则返回-1。
⼆、indexOf函数两种⽤法和实现功能说明
1、 indexOf(String str): 返回指定字符str在字符串中(⽅法调⽤者)第⼀次出现处的起始索引,如果此字符串中没有这样的字符,则返回-1。
2、indexOf(String str, int index): 返回从 index 位置开始查指定字符str在字符串中第⼀次出现处的起始索引,如果此字符串中没有这样的字符,则返回 -1。
举例说明:
String str = "01234567890123456789";
System.out.println(str.indexOf("123"));
System.out.println(str.indexOf("123",5));
上⾯程序的结果为1和11。第1个输出函数中的indexOf()⽅法只有⼀个参数,故返回123在str中第⼀次出现处的索引,为1;第1个输出函数中的indexOf()⽅法有两个参数,第⼀个参数为要查的字符串123,第2个参数为从第5所以位置处开始查,故只能查到str中的第2个123,返回其出现的起始索引,为11。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。