首先让我们看一下API文档,它是这么描述的:
返回索引在这个字符串指定的子字符串中第一个出现的。
喔,原来是找一个字符串中子串第一次出现的位置,我尝试做了一个小的测试,如图所示.
demo现在让我们进入它的源码看看.
首先,在indexOf里面调用了indexOf(str,0)这个方法,我们点进去
然后,发现它又调用了indexOf(value,0,value.length,str.value,0,str.value.length,0),我们有点慌了,咋这么多indexOf呢,再进去瞧瞧吧.
PS:value是char[],在这里,value代表的是待搜索字符串的char[],同理str.value代表的就是子串的char[],
哇,终于到头了!看到了实现方法的代码了.对比上面的参数,这些参数就不一一解释了.首先,第一个if条件,sourceCount是待搜索字符串的长度,fromIndex代表着本次搜索开始的下标,若你输入的开始的下标是该字符数组的末尾或者大于该字符数组的最大长度,那么就根据子串的长度进行判断,若子串的长度为0,那么直接返回待搜索字符串的长度,否则返回-1.第二个if表明若开始搜索的下标小于0,那么就将fromIndex置为0(表明从第一个字符开始搜索),第三个if表明若子串的长度为0(子串为" "),那么就返回fromIndex.PS:前三个if保证了程序对异常输入的一种检查,保证了该方法的鲁棒性.
first是子串的第一个字符,max是待搜索字符串的长度,首先fromIndex开始遍历待搜索的字符数组,尝试找到和first相等的字符,找不到则返回-1,若找到了,记录下此时的i,进行下一步判断,如果此时子串的剩余长度大于待搜索字符串的剩余长度,直接返回-1,否则接着进行判断,若接下来的子串的每一字符都和待搜索字符串的字符一一对应那么就返回i,否则返回-1.
总结:方法不难理解,看这个的原因至于在于学习它是如何保证这个方法的鲁棒性的,还有就是,这个方法在我做的项目中,在判断请求的url中用到了.(根据Session判断是否登录的拦截器)
网友评论