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

    Mac下: 1.下载git版本并安装 运行终端 查看git版本: bogon:~ yan$ git --version git version 2.16.3 配置gitconfig文件 vim ~/. ...

  2. Windows下设置 ssh key,配置GitHub ssh key

    1.新建一个目录,利用git工具打开 Git Bash Here 2.执行如下命令 ssh-keygen -t rsa -C "email@email.com" 其中邮箱为GitH ...

  3. JAVA NIO工作原理及代码示例

    简介:本文主要介绍了JAVA NIO中的Buffer, Channel, Selector的工作原理以及使用它们的若干注意事项,最后是利用它们实现服务器和客户端通信的代码实例. 欢迎探讨,如有错误敬请 ...

  4. 利用css3+js实现简单带立体过渡效果的图片切换(chrome浏览器)

    <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...

  5. Spring使用webjar

    注意事项 这玩意很简单,但是我们第一次搞就是搞不成功,为什么呢?因为我们都用的是idea或者eclipse编译.webjar只能在maven上才能打包,所以在使用时,记得maven-clean和mav ...

  6. php中AJAX请求中使用post和get请求的区别

    之前使用这两个请求的时候,主要从几个方面考虑: 1.语义,get就是从服务器获取,一般就是获取/查询资源信息.post就是提交给服务器,一般就是更新资源信息. 2.请求文件大小,get一般只有2k这样 ...

  7. 漫谈Web缓存架构

    计算机领域多处地方用到缓存,比如说为了缓解CPU和内存之间的速度不匹配问题,我们往往通过增加一级.二级.三级缓存,CPU先从缓存中取指令,如果取不到,再从内存中取,并更新缓存,同时,根据程序的局部性原 ...

  8. Unity CommandBuffer的一些学习整理

    1.前言 近期在整理CommandBuffer这块资料,之前的了解一直较为混乱. 算不上新东西了,但个人觉得有些时候要比加一个摄像机再转RT廉价一些,至少省了深度排序这些操作. 本文使用两个例子讲解C ...

  9. 码农代理免费代理ip端口字段js加密破解

    起因 之前挖过爬取免费代理ip的坑,一个比较帅的同事热心发我有免费代理ip的网站,遂研究了下:https://proxy.coderbusy.com/. 解密 因为之前爬过类似的网站有了些经验,大概知 ...

  10. Django项目实战之用户头像上传与访问

      1 将文件保存到服务器本地 upload.html <!DOCTYPE html> <html lang="en"> <head> < ...