最近接到了一个任务,要求是给出一系列单词,然后看这些单词是否在某篇文本文档中出现过,给出输出结果是或者否。看到这个第一时间香想到的是字符串匹配,最常见的有三种算法,Brute force算法,KMP算法,Boyer Moore算法,关于三种算法的介绍与比较我不在这里过多的叙述,网上已经有很多人针对这些算法做了比较了,文章下面也会给出相应的参考链接。
在当我看这些算法的时候,我的室友问了下我干嘛,然后提醒了用正则表达式会发现惊喜的。于是我去看了下java中关于正则表达式的文档,让我找到了 java.util.regex这个包,看了下介绍确实很管用,用起来也很方便,只要短短的几行代码就可以实现匹配了。
public static void main(String[] args) {
String regEx ="shop";
//检测要匹配的单词,单词的前面必须是空格或者标点符号
Pattern pattern = Pattern.compile("[^\\w]"+regEx+"[^\\w]");
Matcher matcher = pattern.matcher("yesterday, I entered a shop and bought a pencil.");
booleanresult= matcher.find();
System.out.println(result);
}
输出:true
关于字符串的匹配那里用了一个强大的字符串处理工具——正则表达式,它拥有自己独特的语法以及一个独立的处理引擎,内容很复杂,但是可以花点时间快速入门。
它的功能十分强大,得益于这一点,在提供了正则表达式的语言里,正则表达式的语法都是一样的,区别只在于不同的编程语言实现支持的语法数量不同;但不用担心,不被支持的语法通常是不常用的部分。
参考链接:
字符串匹配算法比较
正则表达式30分钟入门教程