对于正则表达式,我通常的认识就是通过一些陌生的奇怪的符号就可以完成很复杂事件的好帮手!实际上正则表达式确实是这方面的好助手,接下来让我们一起认识一下Java中怎么使用正则表达式吧。
初见Pattern
使用的步骤如下:
— Pattern位于java.util.regex.Pattern.是使用正则表达式的主角。在帮助文档上有这样的一段描述:
— 我们不难发现,使用pattern主要是先放入“正则匹配表达式”,然后调用了其matcher方法。如下:
—然后可以看到其返回值类型是一个Matcher对象,那么什么是Matcher呢?
。
—原来如此,获得了matcher对象,只需要调用其成员方法就可以知道正则表达式的匹配的结果了。这样我们也就完成了匹配的操作了!
使用正则表达式匹配处理敏感词汇
这里仅仅是一个简单的演示Demo,所以并不是很全面。
首先是用做敏感词汇的敏感词库,里面设置了三个级别的敏感词,各种含义是:
- 1代表禁止词语,不能对外显示
- 2代表审核词语,需要管理员的审核
- 3代表替换词语,我们要对这些词语进行替换操作
fuck|1
damet|2
soft|3
下面是使用代码进行演示的效果,处理逻辑是
- 读取词库中的数据,然后按照词库中词语特点将不同级别的敏感词放到不同级别的“容器”中,方便待会的匹配
- 使用正则表达式让目标词语一一与敏感词库进行对比
- 获得匹配结果,并进行输出操作。
package regex;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.junit.Test;
/**
* 用于测试正则表达式的内容
* @author Summer
*
*/
public class RegexDemo {
private static List<String> banList = new ArrayList<String>();
private static List<String> authList = new ArrayList<String>();
private static List<String> changeList = new ArrayList<String>();
public static void main(String[] args) {
//初始化敏感词汇并进行加载
try {
File file = new File("src/words.txt");
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = "";
while((line=reader.readLine())!=null){
String []s = line.split("\\|");
if(s[1].trim().equals("1")){
banList.add(s[0].trim());
}
if(s[1].trim().equals("2")){
authList.add(s[0].trim());
}
if(s[1].trim().equals("3")){
changeList.add(s[0].trim());
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//测试敏感词汇
String testString = "fuck";
for(Object reg : banList.toArray()){
Pattern pattern = Pattern.compile(reg.toString());
Matcher matcher = pattern.matcher(testString);
if(matcher.find()){
System.out.println("对不起,敏感词汇!");
return;
}else{
System.out.println(testString);
}
}
}
}
测试结果:
总结
缺点:
- 只做了一个级别的敏感词处理,做的并不完善
- 使用集合作为敏感词容器,仅适合小型的敏感词处理,不适合大规模的处理。
优点: - 较好的使用到了正则表达式对测试内容进行了处理。