串的模式匹配算法1——Brute-Force(BF)算法

来源:互联网 发布:人类的战斗力 知乎 编辑:程序博客网 时间:2024/06/05 09:55

我们来看BF算法(Brute-Force,最基本的字符串匹配算法),BF算法的实现思想很简单:我们可以定义两个索引值i和j,分别指示主串str和子串substr当前正待比较的字符位置,从主串str的第startindex个字符起和子串substr的第一个字符比较,若相等,则继续逐个比较后续字符,否则从主串str的下一个字符起再重新和子串substr的字符进行比较,重复执行,直到子串substr中的每个字符依次和主串str中的一个连续字符串相等,则匹配成功,函数返回该连续字符串的第一个字符在主串str中的位置,否则匹配不成功,函数返回-1。

源代码

package 串;
import java.util.*;
public class Brute_Force_Test {
public static void main(String[] args) throws Exception {
Scanner scan=new Scanner(System.in);
String str=new String();
String substr=new String();
System.out.println("请设置原串:");
str=scan.nextLine();
System.out.println("请输入匹配的子串:");
substr=scan.nextLine();
System.out.println("请输入查找起始下标:");
int index=scan.nextInt();//设置匹配起始位置
int result=-1;
Brute_Force_Test bft=new Brute_Force_Test();
if(index<0||index>str.length()){
throw new Exception("参数错误!");
}else{
result=bft.index_BF(str,index,substr);
}

System.out.println("在下标为    "+result+"  开始匹配上(-1表示匹配不成功)");
}


//Brute-Force匹配算法
private int index_BF(String str, int startindex,String substr) {
int i=startindex;//开始匹配下标
int j=0;//子串下标
int index;//原串下标

if(str.length()<substr.length()){//子串长度大于原串,返回-1
return -1;
}
while(i<str.length()&&j<substr.length()){
if(str.charAt(i)==substr.charAt(j)){
i++;
j++;
}
else{
i=i-j+1;;
j=0;
}
}
if(j==substr.length()){//匹配成功
index=i-substr.length();
}
else{//如果没有匹配上
index=-1;
}
return index;
}
}

1 0