Java字符串搜索思想(String)
while (i >= min && source[i] != strLastChar) { i--; }
?这段代码是在源字符串找到和子串最后一个字符相等的字符,把他的索引存入变量i(从尾部开始查找)
?
如果索引i小余min,意味着已经不在上面规定的查找范围之内了,直接返回-1;
如果索引i合法,那么确定源字符串的查找范围(起点j=i-1,终点start=起点-子串长度+1)【源码中终点的变量是start,作者觉得这是查找的终点,请注意区分】
确定子串的查找起点k=子串最后一个字符索引-1
用源字符串的索引j处的字符和子串索引k处的字符比较,并且j和k各自减1:
如果字符相等,则继续执行上面的比较,直到索引j递减到j>start(索引j超出了查找的终点start),则跳出循环继续往下执行;
如果字符不相等,则程序跳转到锚点startSearchForLastChar处,按照上面的逻辑继续执行;
?
如果if (source[j--] != target[k--])的比对一直相等,并且把while (j > start)循环执行完了,意味着在源字符串找到了子串(只需要找到第一个就可以了,当然是从末尾开始找的),程序返回子串的索引。
?
对于很长的字符串查找的优化,推荐一篇文章:?KMP子字符串查找算法分析与实现
?
全文完。
?
?
?
?