标签:
package org.loda.string;
import org.junit.Assert;
/**
*
* @ClassName: NaiveStringMatcher
* @Description: 朴素字符串查找
*
* text:abcabaabcabac
* pattern:abaa
*
* @author minjun
* @date 2015年7月7日 下午4:02:14
*
*/
public class NaiveStringMatcher {
public static void main(String[] args) throws Exception {
// 原始文本
String text = "abcabaabcabac";
// 查找的模式
String pattern = "abaa";
// 模式在文本中第一次出现的位置
int index = indexOf(text, pattern);
System.out.println(index);
}
private static int indexOf(String text, String pattern) {
Assert.assertNotNull(text);
Assert.assertNotNull(pattern);
int tLen = text.length();
int pLen = pattern.length();
if (tLen < pLen)
return -1;
//每次都往右边偏移一位来比较text和pattern
for (int i = 0; i < tLen - pLen + 1; i++) {
int j;
//最多进行pLen轮比较
for (j = 0; j < pLen; j++) {
//如果发现不相等的马上停止比较
if (text.charAt(i + j) != pattern.charAt(j)) {
break;
}
}
//比较完成之后,如果比较了pLen次,说明执行了完整的比较并且找到了pattern的位置i
if (j == pLen) {
return i;
}
}
//如果还是没有找到pattern的位置,说明在text不存在pattern
return -1;
}
}
标签:
原文地址:http://my.oschina.net/u/1378920/blog/477751