对于正则表达式,我通常的认识就是通过一些陌生的奇怪的符号就可以完成很复杂事件的好帮手!实际上正则表达式确实是这方面的好助手,接下来让我们一起认识一下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);
            }
        }
    }

}

测试结果:


总结

缺点:

  • 只做了一个级别的敏感词处理,做的并不完善
  • 使用集合作为敏感词容器,仅适合小型的敏感词处理,不适合大规模的处理。

    优点:
  • 较好的使用到了正则表达式对测试内容进行了处理。

最新文章

  1. css3渐变
  2. 表A的数据减去表B ,最终得到表C
  3. 03SpringMvc_自定义的spring.xml配置文件和逻辑视图名
  4. Review of Segmentation for Medical image analysis
  5. 关于VS2010“ADO.NET Entity Data Model模板丢失或者添加失败问题
  6. BNUOJ 34985 Elegant String 2014北京邀请赛E题 矩阵快速幂
  7. Sql Server 主键由字母数字组成并按照数字自动增长
  8. iReport默认参数和变量的含义解析【转】
  9. R语言学习——向量
  10. 有标号的DAG计数I~IV
  11. tensorflow报cudnn错误
  12. Java 非递归实现 二叉树的前中后遍历以及层级遍历
  13. Windows7下安装、部署Weblogic和发布war项目
  14. 关于MySQL索引的最左前缀匹配原则原理说明说明
  15. (转载)Unity UGUI鼠标点击UI不受影响方法IsPointerOverGameObject
  16. 每日踩坑 2019-04-08 VS2015未能找到路径“…\bin\roslyn\csc.exe”的解决方案
  17. CMake error with move_base_msgs问题解决
  18. http系列(一)
  19. Win7如何解决telnet不是内部或外部命令的方案!
  20. 三步搞定 opencv 初始环境设定

热门文章

  1. shell 报错:syntax error: unexpected end of file
  2. Scrapy框架
  3. 【转】Java方向如何准备技术面试答案(汇总版)
  4. 解决nodejs中json序列化时Date类型为UTC格式
  5. java.lang.SecurityException: Prohibited package name:
  6. 线性表 linear_list 顺序存储结构
  7. Firebird数据库相关操作
  8. ResizeObserver - 元素resize监听API
  9. RobotFramework自动化测试框架-使用Python编写自定义的RobotFramework Lib
  10. Servlet再度学习