字符串暴力匹配

在我们学习Java的过程中,我们会学到很多的类,很多的方法。其中方法给我们解决问题带来了很大的便利。有些时候,我们知道一个方法可以解决这个问题,我们就使用它,但我们不知道他的底层原理是什么样子的。

就拿String类中的contains()方法来说吧,

String a="aabbcc",b="bb";int index=a.contains(b);

我们知道他是用来判断a字符串有没有包含b字符串的,并且返回值是b字符串首字符在a中的角标。当然,本例的index肯定是2了。

其实这个代码很简单,想必很多人都能够自己写一个一样的算法。没错,他很简单,那我们就放松心情,来简单的看一下源码吧:

 1 //暴力匹配
 2 public static int getBaoLiPiPei(String str1,String str2){
 3     int i=0,j=0;//首先,声明两个指针,分别指向第一个字符串str1和第二个字符串str2的字符脚标
 4     while (i<str1.length()&&j<str2.length()){//如果满足条件,说明还没有遍历完毕
 5         if (str1.charAt(i)==str2.charAt(j)){//如果i指针和j指针指向的字符相同,则指针向后移
 6             i++;
 7             j++;
 8         }else {//不满足条件说明没有匹配到
 9             i=i-j+1;//所以i指向i减去j+1,也就是减去i移动步数加1的位置
10             j=0;//所以j指向0
11         }
12         if (j==str2.length()){//如果j指针指向了str2的最后,说明已经匹配到了该字符串
13             return i-j;//则返回该字符串的位置
14         }
15     }
16     return -1;//否则就是没有匹配到,就返回-1
17 }

 

首先,他是靠两个指针分别指向两个字符串的开始位置,然后进入循环,一点一点的匹配,看有没有包含字符串。有就跳出循环,没有就继续匹配,一直到第一个字符串走到结尾,然后跳出循环,返回-1,也就是没找到的意思。注释上面我写的很清楚,大家看一看吧。

posted @ 2020-08-17 21:40  wen_t_y  阅读(130)  评论(0)    收藏  举报