2 steve yanrun steve_yanrun 于 2016.03.17 09:10 提问

串模式匹配BF算法的java实现

如下代码,进行串模式匹配BF算法的java实现

 class BF{
    public int bF(char S[],char T[]){
        int i=0,j=0,index=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 0;
        }
    }
}
public class String_matching {
    public static void main(String[] args) {
        BF bf = new BF();
        String str1 = "ababacbc";
        String str2 = "bacb";
        char c1[] = str1.toCharArray();
        char c2[] = str2.toCharArray();
        bf.bF(c1, c2);
    }
}

运行后抛出如下异常
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
at BF.bF(String_matching.java:4)
at String_matching.main(String_matching.java:28)
请问这是为什么?谢谢

1个回答

u011489205
u011489205   2016.03.17 10:20
已采纳

while条件中需要增加下标索引值和字符串长度判断逻辑。

u011489205
u011489205 回复颜Runer: java中没有使用'\0'来判断字符串结束的。字符串结束符不是'\0'
2 年多之前 回复
steve_yanrun
steve_yanrun 好的,多谢!
2 年多之前 回复
u011489205
u011489205 回复颜Runer: 判断是否遍历结束为什么不使用下标索引值和数组长度值之间比较,判断'\0'是c语言中的判断字符串结束的条件,但是在java中并不是这样。况且你那两个字符数组中没有'\0'这个字符串。所以条件是永不可达的
2 年多之前 回复
steve_yanrun
steve_yanrun 能再具体一点点吗,因为while中的‘\0’就是判断字符串有没有遍历结束,索引值也定义了i,j并赋了初值0,不太懂你的意思^_^
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
数据结构(11)--串的模式匹配算法之BF、KMP算法
参考书籍:数据结构(C语言版)严蔚敏吴伟民编著清华大学出版社 1.串的存储 1.1定长顺序存储 串的定长顺序存储(静态数组):     #define  MAXSTRLEN  255  // 用户可在255以内定义最大串长      typedef unsigned char  SString[MAXSTRLEN + 1];//0号单元存放串的长度 特点:     串的实
使用C语言实现串的匹配朴素算法(BF算法)
使用C语言实现BF这种低效率的算法,代码还是比较简单的。 不过效率比较低下。#include <stdio.h> #include <stdlib.h> #include <string.h>#define MAXSIZE 100 #define MINSIZE 30int main() { char parentString[MAXSIZE]; char sonString[MI
串的基本操作&&串的简单模式匹配(BF算法)
串的基础知识与基本操作
Java实现BF串匹配算法
//java实现BF串匹配算法: import java.util.Scanner; public class Demo8 {     public static void main(String[] args) {         Scanner s = new Scanner(System.in);         System.out.println("请输入第一个字符串:");
串匹配-BF算法
今天看了一下数据结构中串的相关知识,着重看了一下BF算法和KMP算法,虽然说是看,但是对于KMP算法中next的值的怎么得来的,还是没有看懂只记得当初学的时候,大家说是离散数学上的知识,唉,现在又忘光光了,还是先说一下BF算法。 看书的时候才知道,原来BF算法又称蛮力匹配算法,不啰唆了,先描述一下该算法。 从主串S的第pos位置开始,与模式串T比较,比较的策略是 从前到后依次比较,主串中设置指
KMP与BF模式匹配算法
看书看到了模式匹配算法
串模式匹配——从BF到KMP最精讲
(转载自朋友的博客http://blog.csdn.net/msdnwolaile/article/details/51287911#comments) 看了好多关于KMP算法的书籍和资料,总感觉没有说的很清楚,为什么会产生next数组,为什么给出了那么简短的程序,没有一个过程,而有的帖子虽然next及其字符串匹配说的很清楚,但是推理的一些过程相当复杂,比较抽象,今天在这里简单的提一下我的理
【数据结构与算法】模式匹配——从BF算法到KMP算法(附完整源码)
子串的定位操作通常称为串的模式匹配。模式匹配的应用很常见,比如在文字处理软件中经常用到的查找功能。我们用如下函数来表示对字串位置的定位: int index(const string &Tag,const string &Ptn,int pos) 其中,Tag为主串,Ptn为子串(模式串),如果在主串Tag的第pos个位置后存在与子串Ptn相同的子串,返回它在主串Tag中第pos个字符后第一次出现的位置,否则返回-1。 我们先来看BF算法(Brute-Force,最基本的字符串匹配算法),B
串的模式匹配算法(BF算法和KMP算法)
串的模式匹配算法 子串的定位操作通常称为串的 模式匹配,其中T称为 模式串。 一般的求子串位置的定位函数(Brute Force)我写java的代码是这样的int index(String S,String T,int pos){ char[] s_arr = S.toCharArray(); char[] t_arr = T.toCharArray();
数据结构第四次上机 第四章之BF和KMP算法(顺序串的各种模式匹配算法)
实验题3:实现顺序串的各种模式匹配算法(即BF和KMP算法)设计 内容: 编写一个程序,实现顺序串的各种模式匹配运算,并在此基础上完成如下功能: (1)建立“abcabcdabcdeabcdefabcdefg”目标串s和“abcdeabcdefab”模式串t。 (2)采用简单匹配算法求t在s中的位置。 (3)由模式串t求出next值和nextval值。