`
风-起-了
  • 浏览: 7155 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

屏蔽词功能实现

    博客分类:
  • java
阅读更多

     自己上学的时候,经常会看到贴吧里面屏蔽各种用户的发帖内容,当时就想这个该如何去实现。自己当时想过用字符串去替代的方式(replaceAll)去实现,但是这种效率又非常低,也不能保证最长匹配,这就是自己当时最初的想法。最近自己做的一个项目中,需要对一些内容做屏蔽,自己又对这个问题做了一次分析,最终形成下面的代码。最近一直在赶项目,所以注释很少,原谅

 

转载请标明来源:http://xiaojimanman.iteye.com/admin/blogs/1978245

 

 /**  
 *@Description: 屏蔽词功能实现    
 */ 
package cn.yicha.novel.search.util;  

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;

import cn.yicha.novel.search.config.Config;
  
public class Forbidden {
	
	private static Forbidden forbidden = new Forbidden();
	//屏蔽词HashSet
	private HashSet<String> keyString = new HashSet<String>();
	private final static int maxLength = Character.MAX_VALUE;
	//屏蔽词长度HashSet数组
	@SuppressWarnings("unchecked")
	private HashSet<Integer>[] keyLength = new HashSet[maxLength];
	
	private Forbidden() {
		System.out.println(Config.getClassRoot() + "forbidden.txt");
		loadForbidden(Config.getClassRoot() + "forbidden.txt");
	}
	public static Forbidden getForbidden(){
		return forbidden;
	}
	
	/**
	 * @param str
	 * @return
	 * @Date: 2013-11-15  
	 * @Author: lulei  
	 * @Description: 输入的字符串通过屏蔽处理
	 */
	public String read(String str){
		if (str == null){
			return null;
		}
		StringBuffer stringBuffer = new StringBuffer();
		int start = 0;
		for (int i = 0; i < str.length();){
			int at = str.charAt(i);
			if (keyLength[at] == null){
				i++;
				continue;
			} else {
				int ml = 0;
				for (Object obj : keyLength[at].toArray()){
					int len = ((Integer)obj).intValue();
					if (i + len <= str.length()){
						String s = str.substring(i, i + len);
						if (keyString.contains(s)){
							ml = len > ml ? len : ml;
						}
					} 
				}
				if (ml > 0){
					stringBuffer.append(str.substring(start, i)).append("***");
					i += ml;
					start = i;
				} else {
					i++;
				}
			}
		}
		if (start < str.length()){
			stringBuffer.append(str.substring(start));
		}
		return stringBuffer.toString();
	}
	
	/**
	 * @param path
	 * @Date: 2013-11-15  
	 * @Author: lulei  
	 * @Description: 初始化加载屏蔽词
	 */
	public void loadForbidden(String path){
		File forbiddenFile = new File(path);
		FileInputStream fileInputStream;
		try {
			fileInputStream = new FileInputStream(forbiddenFile);
			InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "utf-8");
			BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
			String s;
			while ((s = bufferedReader.readLine()) != null){
				s = s.trim();
				if (s.length() > 0){
					keyString.add(s);
					int i = s.charAt(0);
					if (keyLength[i] == null){
						HashSet<Integer> a = new HashSet<Integer>();
						a.add(s.length());
						keyLength[i] = a;
					} else {
						keyLength[i].add(s.length());
					}
				}
			}
			fileInputStream.close();
			bufferedReader.close();
			fileInputStream.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} 
	}

	public static void main(String[] args) {
		System.out.println(Forbidden.getForbidden().read("屏蔽词nihao"));
	}

}

 

分享到:
评论

相关推荐

    java实现屏蔽词功能

    主要介绍了java实现屏蔽词功能,类似贴吧里面屏蔽各种用户的发帖内容,感兴趣的小伙伴们可以参考一下

    C# 屏蔽关键字的实现方法

    前段时间在公司做了一个论坛屏蔽关键字的功能,我做的比较简单、实用~ 现在拿出来给博友们分享下..也希望大家能顶顶我~

    JS使用ActiveXObject实现用户提交表单时屏蔽敏感词功能

    本例中敏感词ciku.txt放在C盘根目录下,采用的... // -------------- 全局变量,用来判断文本域中是否包含脏词,默认为false,即不包含脏词------- var isDirty = false; //使用ActiveX读取本地文件获取dirt

    基于ThinkPHP+MySQL实现的通用的PHP网站后台管理系统源码+数据库,界面清爽极简,极便于二次开发

    10、评论系统(支持盖楼评论,支持设置屏蔽词、验证码、是否需审核等,可整合到任何场景。可以自动适配电脑、平板和手机等不同客户端。) 主要提供了以上基础功能,您可以在此基础上拓展和开发出不同的应用。

    基于python实现朴素贝叶斯的垃圾邮件过滤系统源码+操作说明(毕业设计).zip

    基于python实现朴素贝叶斯的垃圾邮件过滤系统源码+操作说明(毕业设计).zip 【资源说明】 基于python实现朴素贝叶斯的垃圾邮件过滤...4.点击屏蔽词可以自定义或使用内置的两种屏蔽词 5.输入想要测试的邮件号即可判断

    Python实现基于朴素贝叶斯的垃圾邮件过滤系统项目源码+操作说明(可用于毕设).zip

    4.点击屏蔽词可以自定义或使用内置的两种屏蔽词 5.输入想要测试的邮件号即可判断 6.若想测试邮箱中的邮件,需要联网。 1.在get_mail.py中写自己的邮箱,并在相关网站完成配置 2.在test-ham中放置类似test-ham1中...

    基于NoneBot框架的Ai聊天插件,对接OpenAi文本生成接口,实现了机器人的人格 自定义/切换,聊天记忆等功能

    自定义屏蔽词: 不想让 TA 学坏?需要更安全一点? 随机参与聊天: 希望 TA 主动一些?TA 会偶然在你的群组中冒泡…… 异步支持:赋予 TA 更强大的消息处理能力! 可扩展功能: 厌倦了单调的问答 AI?为 TA 解锁超...

    基于原生PHP + MySQL实现的功能强大的评论系统源码+数据库,可以自动适配电脑、平板和手机等不同客户端

    (b)参数cmt_config为评论系统基础配置参数,可以设置评论每页的数量、验证码、缓存、是否需要审核、是否允许发图片、滚动自动加载、屏蔽词等等。 (c)参数cmt_faces为表情包配置,可以把不需要的表情注释掉即可。

    PKUHoleCommunity:P 大树洞网页版社区分支,欢迎大家动手自己实现功能

    PKU Hole Community P 大树洞网页版社区分支 (简称“树洞社区版”) 无疑取得了巨大的成功,占有较大的“市场份额” 贵校有很多动手能力强的...屏蔽词 在关注列表中搜索 别名 关注列表按最新回复排序 次要功能 从一个

    php百度贴吧小偷天宇版 v1.0

    1.实现伪静态功能 2.自定义伪静态路径 3.自定义伪静态后缀 4.添加缓存功能,采集不到不缓存 5.自定义二级目录功能 6.自定义模板(模板分离,自己可编写模板) 7.网站后台管理功能 8.伪静态规则在后台设置完成...

    php百度贴吧小偷天宇版 v1.0.zip

    1.实现伪静态功能 2.自定义伪静态路径 3.自定义伪静态后缀 4.添加缓存功能,采集不到不缓存 5.自定义二级目录功能 6.自定义模板(模板分离,自己可编写模板) 7.网站后台管理功能 8.伪静态规则在后台设置完成...

    股票贴吧小偷天宇版 v1.0

    1.实现伪静态功能 2.自定义伪静态路径 3.自定义伪静态后缀 4.添加缓存功能,采集不到不缓存 5.自定义二级目录功能 6.自定义模板(模板分离,自己可编写模板) 7.网站后台管理功能 8.伪静态规则在后台设置完成...

    我记录网站综合系统 1.6源码

    微博:微博功能增强,实现全功能微博 采集:新闻采集功能,包括定时采集、图片抓取和数据导入 wiki:将通用页面转化为可以多人协作编辑的wiki形式 群组:重新设计前台和后台界面 增加ip屏蔽功能 标签tag增强:...

    网趣网上购物系统时尚版V13.0

    新增的搜索关键词功能,可以记录用户在网站上搜索过哪些关词,以及相同关键词的搜索次数等信息,帮助管理员分析网站很有利。 二一、网站资料防复制功能 开启防复制功能,可以有效的防止网站的资料被其他人轻易的...

    芭奇站群管理软件 v2019.05.25.zip

    芭奇站群营销软件全面支持标题和内容的近义词反义词替换,分词重构,违禁词库屏蔽,内容段落打乱重排,以及文章内容随机插入图片、视频等,能很好的实现标题和内容的伪原创;无论你做几个,几十个甚至几百个站,都不...

    网趣网上购物系统时尚版

    新增的搜索关键词功能,可以记录用户在网站上搜索过哪些关词,以及相同关键词的搜索次数等信息,帮助管理员分析网站很有利。 二十、网站资料防复制功能 开启防复制功能,可以有效的防止网站的资料被其他人轻易的...

    网趣网上购物系统的部分特点与精华

    新增的搜索关键词功能,可以记录用户在网站上搜索过哪些关词,以及相同关键词的搜索次数等信息,帮助管理员分析网站很有利。 二一、网站资料防复制功能 开启防复制功能,可以有效的防止网站的资料被其他人轻易的...

    网趣网上购物系统时尚版 V9.0

    新增的搜索关键词功能,可以记录用户在网站上搜索过哪些关词,以及相同关键词的搜索次数等信息,帮助管理员分析网站很有利。 十八、网站资料防复制功能 开启防复制功能,可以有效的防止网站的资料被其他人轻易的...

    LED电子显示屏系统设计方案.doc

    11 7.1.2 防静电的具体措施 12 7.2 电磁屏蔽 12 7.3 接地系统 12 7.3.1 直流地接大地 12 7.3.2 安全保护 12 第八章 系统软件 13 8.1基本功能 13 8.2基本操作 13 8.3基本方式 13 第九章 系统性能分析 14 9.1先进的...

    网趣网上购物系统HTML静态版v2012版

    新增的搜索关键词功能,可以记录用户在网站上搜索过哪些关词,以及相同关键词的搜索次数等信息,帮助管理员分析网站很有利。 二二、网站资料防复制功能 开启防复制功能,可以有效的防止网站的资料被其他人轻易的...

Global site tag (gtag.js) - Google Analytics