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

    train_test_split函数用于将数据划分为训练数据和测试数据. train_test_split是交叉验证中常用的函数,功能是从样本中随机的按比例选取train_data和test_data ...

  2. 深入分析synchronized的实现原理

    基础概念 synchronized可以保证方法或者代码块在运行时,同一时刻只有一个方法可以进入到临界区,同时可以保证共享变量对内存可见性. Java中每一个对象都可以作为锁,这是synchronize ...

  3. idea Library XXXXXXXX has broken classes paths

    点fix 然后全部 全部按- 删掉 一开始以为会影响很大 后来发现他地址错了都导不进 要是真要用到的时候也没用 还是要maven单独导进来

  4. python 类属性.方法 实例的基本用法

    class man(): classify = "people"# 全局属性 def __init__(self,name,age,value,):#类方法 self.name = ...

  5. centos6 网卡配置,多IP设置

    ##云服务器 centos6网卡配置 #设置出口IP vim /etc/sysconfig/network-scripts/ifcfg-eth0DEVICE=seth0 #网卡名称 BOOTPROTO ...

  6. Docker服务端防护

    运行一个容器或应用程序的核心是通过 Docker 服务端.Docker 服务的运行目前需要 root 权限,因此其安全性十分关键. 首先,确保只有可信的用户才可以访问 Docker 服务.Docker ...

  7. 解决ASP.NET MVC 检测到有潜在危险的 Request.Form 值

    提交使用html编辑器编辑后的数据,由于Request时出现有HTML或JavaScript等字符串时,系统会认为是危险性值.立马报错. "从客户端 ... 中检测到有潜在危险的 Reque ...

  8. Android源码解析——AsyncTask

    简介 AsyncTask 在Android API 3引入,是为了使UI线程能被正确和容易地使用.它允许你在后台进行一些操作,并且把结果带到UI线程中,而不用自己去操纵Thread或Handler.它 ...

  9. Apache Curator入门实战

    Apache Curator入门实战 Curator是Netflix公司开源的一个Zookeeper客户端,与Zookeeper提供的原生客户端相比,Curator的抽象层次更高,简化了Zookeep ...

  10. 自定义支持多行显示的RadioGroup

    自定义支持多行显示的RadioGroup 原生的RadioGroup继承自LinearLayout,即只能支持一横排或者一竖排的排列显示RadioButton 现在改写RadioGroup,使它支持多 ...