简单的字符串模式匹配算法,可使用KMP进行优化
/**
* @param s1 母串
* @param s2 子串
* @return
*/
public static int myIndexOf(String str1,String str2) {
int pos=-1;
int index=0;
char [] s1= str1.toCharArray();
char [] s2= str2.toCharArray();
if(str2.length()>str1.length() || str2.length()==0) {
return -1;
}
/**
* offset 偏移量,注意不要越界也可以
*/
for(int i=0;i<s1.length;i++) {
boolean flag=false;
for(int offset=0;offset<s2.length;offset++) {
if(i+offset>=s1.length || s1[i+offset]!=s2[offset]) {
flag=true;
}
}
if(flag==false) {
pos=i;
break;
}
}
return pos;
}
使用随机数类生成一个Long和Int数据进行测试,并与Java的方法进行对比
public static void main(String[] args) {
for(int i=1;i<50;i++) {
String str1 = new String(new Long(new Random().nextLong()).toString());
String str2 = new String(new Long(new Random().nextInt(100)).toString());
System.out.println(str1);
System.out.println(str2);
System.out.println("String的----------------:"+str1.indexOf(str2));
System.out.println("我的 ----------------:"+myIndexOf(str1, str2));
}
}
输出
-3622146795902383909
57
String的----------------:-1
我的 ----------------:-1
1679239383684246692
67
String的----------------:1
我的 ----------------:1
-1953669201709644975
39
String的----------------:-1
我的 ----------------:-1
6962415100876379873
10
String的----------------:7
我的 ----------------:7
-4904617570101049131
90
String的----------------:2
我的 ----------------:2