//java实现BF串匹配算法:
import java.util.Scanner;
public class Demo8 {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println("请输入第一个字符串:");
String str1 = s.nextLine();
System.out.println("请输入第二个字符串:");
String str2 = s.nextLine();
int index = find(str1,str2);
System.out.println("str2在str1中的位置为:"+index);
}
public static int find(String str1,String str2){
int index = 0;
int i = 0,j = 0;
char[] arr1 = str1.toCharArray();
char[] arr2 = str2.toCharArray();
while(i<arr1.length && j<arr2.length){
if(arr1[i]==arr2[j]){
i++;
j++;
}else{
index++;
i = index;
j = 0;
}
}
if(j==arr2.length){
return index+1;//输出的是位置,所以角标要加1!
}
return -1;
}
* 注意:判断'\0'是C语言中的判断字符串结束的条件,但是在Java中并不是这样。两个字符数组中没有'\0'这个字符串
* 所以条件是永不可达到的。所以会出现:java.lang.ArrayIndexOutOfBoundsException空指针异常!
*/
![](https://img-blog.csdn.net/20170921203227332?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbTBfMzgxMTA2MDQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
* C++实现BF算法:
* @return
* int BF(char S[],char T[]){
* int index = 0;
* int i = 0,j = 0;
* while(S[i]!='\0'&&T[j]!='\0'){
* if(S[i]==T[j]){
* i++;
* j++;
* }else{
* index++;
* i = index;
* j = 0;
* }
* }
* if(T[j]=='\0')
* return index+1;
* else
* return -1;
* }
import java.util.Scanner;
public class Demo8 {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println("请输入第一个字符串:");
String str1 = s.nextLine();
System.out.println("请输入第二个字符串:");
String str2 = s.nextLine();
int index = find(str1,str2);
System.out.println("str2在str1中的位置为:"+index);
}
public static int find(String str1,String str2){
int index = 0;
int i = 0,j = 0;
char[] arr1 = str1.toCharArray();
char[] arr2 = str2.toCharArray();
while(i<arr1.length && j<arr2.length){
if(arr1[i]==arr2[j]){
i++;
j++;
}else{
index++;
i = index;
j = 0;
}
}
if(j==arr2.length){
return index+1;//输出的是位置,所以角标要加1!
}
return -1;
}
}
* 注意:判断'\0'是C语言中的判断字符串结束的条件,但是在Java中并不是这样。两个字符数组中没有'\0'这个字符串
* 所以条件是永不可达到的。所以会出现:java.lang.ArrayIndexOutOfBoundsException空指针异常!
*/
/**
** C++实现BF算法:
* @return
* int BF(char S[],char T[]){
* int index = 0;
* int i = 0,j = 0;
* while(S[i]!='\0'&&T[j]!='\0'){
* if(S[i]==T[j]){
* i++;
* j++;
* }else{
* index++;
* i = index;
* j = 0;
* }
* }
* if(T[j]=='\0')
* return index+1;
* else
* return -1;
* }
*/
作者:jacky