对于正则表达式,我通常的认识就是通过一些陌生的奇怪的符号就可以完成很复杂事件的好帮手!实际上正则表达式确实是这方面的好助手,接下来让我们一起认识一下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. 从 vCenter Server 使用的数据库中清除旧数据 (2075138)(转)

    Document Id 2075138 Symptoms 免责声明: 本文为 Purging old data from the database used by VMware vCenter Ser ...

  2. Cisco 交换机配置的基本命令

    1.不同的vlan 不同vlan需要路由 在路由的端口设置多个IP段 交换机模拟器实验六 2.查看端口名字 SWA#sh vlan    default  Active  F0/1, F0/2, F0 ...

  3. jmeter分布式测试远程连接失败

    jmeter分布式部署其实很简单.但今天测试的时候发现了一个坑,远程连接一直失败. 原因:服务器上部署了slave,而这台服务器上有多个网卡.举个例子:ip分别为:192.168.100.6,10.1 ...

  4. 剑指架构师系列-ActiveMQ队列的使用

    安装ActiveMQ只需要下载包后解压,然后就可以启动与关闭ActiveMQ了,如下: ./activemq start ./activemq stop 访问管理页面: http://10.10.20 ...

  5. delphi 线程教学第四节:多线程类的改进

    第四节:多线程类的改进   1.需要改进的地方   a) 让线程类结束时不自动释放,以便符合 delphi 的用法.即 FreeOnTerminate:=false; b) 改造 Create 的参数 ...

  6. django模板语言中的extends,block和include

    extends和block一起用 它们用于母版和子版的继承 在母版html中将一些需要替换的部分用{% block xxx %}...{% endblock %}括起来, 在子版html中,在第一行需 ...

  7. springMVC源码分析--ModelFactory

    ModelFactory是用来维护Model的,具体包含两个功能 (1)初始化Model (2)处理器执行后将Model中相应的参数更新到SessionAttributes中 1.初始化Model其实 ...

  8. APP自动化框架LazyAndroid使用手册(4)--测试模板工程详解

    概述 前面的3篇博文分别对lazyAndroid的框架简介.元素抓取和核心API进行了说明,本文将基于框架给出的测试模板工程,详细阐述下使用该框架进行安卓UI自动化测试的步骤. 模板工程 先来看一下模 ...

  9. postgresql添加字段

    ALTER TABLE jiangan_config ADD COLUMN article text NOT NULL DEFAULT ''; pg_dump -s database_name -t ...

  10. Android自定义View(LineBreakLayout-自动换行的标签容器)

      最近一段时间比较忙,都没有时间更新博客,今天公司的事情忙完得空,继续为我的自定义控件系列博客添砖加瓦.本篇博客讲解的是标签自动换行的布局容器,正好前一阵子有个项目中需要,想了想没什么难度就自己弄了 ...