- public class StringIndexOf {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- String s = "Hello";
- System.out.println(indexOf(s, "ello"));
- System.out.println(indexOf(s, "eklo"));
- }
-
- public static boolean indexOf(String src, String target) {
- if (src == null || target == null)
- return false;
- int lenSrc = src.length();
- int lenTarget = target.length();
-
- if (lenSrc < lenTarget)
- return false;
-
- // 从src字符串的第i个字符开始,看是否能匹配target字符串。
- // i的范围可以是[0, lenSrc - 1],当然也可以略作优化,要求src从i开始的子串长度不小于target的长度
- Outer:
- for (int i = 0; lenSrc - i >= lenTarget; i++) {
- // 匹配target字符串的首字符后,进入内层循环匹配target字符串的剩余字符
- if (src.charAt(i) == target.charAt(0)) {
- int j = 1;
- while (j < lenTarget) {
- // 有一个字符不匹配就重新返回外层循环,从src的第i+1个字符开始尝试匹配
- if (src.charAt(i + j) != target.charAt(j))
- continue Outer;
- j++;
- }
- // 从src的第i个字符开始完全匹配target,返回true
- return true;
- }
- }
- // 从src的每个字符开始都无法匹配target,返回false
- return false;
- }
- }
复制代码 |