最近 Android 做了一个全文关键字高亮的功能,直接用了 Java 现成的 API 解决了,在查阅资料的过程中得知还有几种匹配算法:BF、RK、KMP、BM、Sunday,有空就做了一些了解。这里记录一下防止忘记,阮一峰大神关于这些算法的博客写的很好。
BF
暴力检索,这种方法最容易想到,也是最容易实现的,从首字母开始挨个的将关键字和做比对。用下面的图片就能只管的说明(图片来自阮一峰大神的博客)
代码实现:
- package other.string.textmatch;
-
- /**
- * 暴力检索
- */
- public class BFMatch {
-
- /**
- * 暴力检索,输出匹配到的关键字的起始索引(包括起始索引在内,因为有的是不包括结尾下标在内,所以这里说明一下)
- *
- * @param originText 原始文字
- * @param keyword 要匹配的关键字
- */
- public static void BFMatch(String originText, String keyword) {
- char originChar;
- for (int i = 0; i < originText.length(); i++) {
- for (int j = 0; j < keyword.length(); j++) {
- if (i + j >= originText.length()) break;
- originChar = originText.charAt(i + j);
-
- if (originChar != keyword.charAt(j)) {
- break;
- }
-
- if (j == keyword.length() - 1) {
- System.out.println("找到匹配字符串,起始:" + i +
- " 终止:" + (i + keyword.length() - 1));
- }
- }
- }
- }
-
- public