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

}

测试结果:


总结

缺点:

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

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

Java中怎么简单的使用正则表达式?的更多相关文章

  1. Java中的简单工厂模式

    举两个例子以快速明白Java中的简单 工厂模式: 女娲抟土造人话说:“天地开辟,未有人民,女娲抟土为人.”女娲需要用土造出一个个的人,但在女娲造出人之前,人的概念只存在于女娲的思想里面.女娲造人,这就 ...

  2. Java中的简单工厂模式(转)

    Java中的简单工厂模式 举两个例子以快速明白Java中的简单工厂模式: 女娲抟土造人话说:“天地开辟,未有人民,女娲抟土为人.”女娲需要用土造出一个个的人,但在女娲造出人之前,人的概念只存在于女娲的 ...

  3. java中最简单的计算执行时长的方式

    日常在做一些性能测试的时候会通过执行时间来判断执行时长,java中最简单的方式如下: //开始时间 long startL= new Date().getTime(); //这里需要导入 java.u ...

  4. Java中Redis简单入门

    Redis是一个开源的,先进的 key-value 存储可用于构建高性能,可扩展的 Web 应用程序的解决方案. Redis官方网网站是:http://www.redis.io/,如下: Redis ...

  5. 转义字符\(在hive+shell以及java中注意事项):正则表达式的转义字符为双斜线,split函数解析也是正则

    转义字符 将后边字符转义,使特殊功能字符作为普通字符处理,或者普通字符转化为特殊功能字符. 各个语言中都用应用,如java.python.sql.hive.shell等等. 如sql中 "\ ...

  6. java中CyclicBarrier简单入门使用

    一个同步辅助类,它同意一组线程互相等待,直到到达某个公共屏障点 (common barrier point). 在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待.此时 CyclicBarr ...

  7. java中最简单的方式新起一个线程

    启动一个线程在一个方法中启动一个线程,有两种方法第一种是让类实现Runable接口,这样的话编译器就会提示你实现里面的未实现的方法(就是run方法)第二种是,现在方法中new一个线程,然后直接调用他的 ...

  8. java中一个简单的下载示例

    首先在tomcat服务器下的webapps的download项目下建一个doc文件夹,再建个test.doc.防止控指针异常 DownLoad.java代码 package com.down; imp ...

  9. Java中StringBuffer 简单学习,LeetCode中1323题运用

    StringBuffer 学习 StringBuffer() 构造一个没有字符的字符串缓冲区,初始容量为16个字符. deleteCharAt(int index) 删除char在这个指定序列inde ...

随机推荐

  1. DELL、HP、IBM X86服务器命名规则

    DELL.HP.IBM X86服务器命名规则 各大服务器厂家对于自己的服务器命名都有一定的规则,通常会根据服务器的外观(如塔式.机架式.刀片等).处理器(如Intel或者AMD等).架构等信息来命名. ...

  2. 剖析Vue原理&实现双向绑定MVVM

    转自:http://www.w3cmark.com/2016/496.html 本文能帮你做什么? 1.了解vue的双向数据绑定原理以及核心代码模块 2.缓解好奇心的同时了解如何实现双向绑定 为了便于 ...

  3. 重新设置Eclipse的workspace路径

    有3中方法可以更改workspace的路径设置: 1. 启动Eclipse/MyEclipse后, 打开"Window -> Preferences -> General -&g ...

  4. linux route 路由设置小记

    情景一: 有一台ip为172.16.160.53服务器,此服务器为固定ip,由于某些特殊情况,此服务器的ip不能修改. 现在这台服务器需要与另外一个网段ip为172.16.176.150服务器进行局域 ...

  5. flask+apscheduler+redis实现定时任务持久化

    在我们开发flask的时候,我们会结合apscheduler实现定时任务,我们部署到服务器上,会不会遇到这样的问题,每次我们部署后,我们重启服务后,原来的定时任务都需要重启,这样对我们经常迭代的项目肯 ...

  6. Docker命令查询

    基本语法 docker [OPTIONS] COMMAND [arg...] 一般来说,Docker 命令可以用来管理 daemon,或者通过 CLI 命令管理镜像和容器.可以通过 man docke ...

  7. Docker 内核名字空间

    Docker 容器和 LXC 容器很相似,所提供的安全特性也差不多.当用 docker run 启动一个容器时,在后台 Docker 为容器创建了一个独立的名字空间和控制组集合. 名字空间提供了最基础 ...

  8. SQL Server 扩展事件(Extented Events)从入门到进阶(4)——扩展事件引擎——基本概念

    本文属于 SQL Server 扩展事件(Extented Events)从入门到进阶 系列 在第一二节中,我们创建了一些简单的.类似典型SQL Trace的扩展事件会话.在此过程中,介绍了很多扩展事 ...

  9. Lua判断OS并添加cpath

    Lua判断OS并添加cpath(金庆的专栏)Lua初始化时需要根据OS来设置package.cpath, 如果是Windows系统则添加 ?.dll, 否则添加 ?.so.不然加载错误后缀名的动态库会 ...

  10. Spring之MVC模块

    Spring MVC的Controller用于处理用户的请求.Controller相当于Struts 1里的Action,他们的实现机制.运行原理都类似 Controller是个接口,一般直接继承Ab ...