`
风-起-了
  • 浏览: 7325 次
  • 性别: 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的屏蔽词功能实现的详细解析。 首先,我们创建一个名为`Forbidden`的类,这个类包含了屏蔽词的处理逻辑。它使用了`HashSet`数据结构来存储屏蔽词,因为`HashSet`提供了快速的查找功能,对于大量...

    最新游戏屏蔽字库-lua版-附带使用接口

    总的来说,"最新游戏屏蔽字库-lua版"为游戏开发者提供了一种高效、易用的工具,帮助他们在游戏中实现屏蔽字的过滤功能,以维护一个健康、和谐的游戏环境。通过理解和利用这个库,开发者可以更专注于游戏的核心玩法,...

    屏蔽字库 测试工程

    1. **屏蔽字库**:屏蔽字库通常是一份包含各种敏感词汇的列表,如脏话、非法字符、广告词等。在本项目中,开发者创建了一个字库,用于存储这些需要被屏蔽的词汇。在处理用户输入时,系统会对比字库,检查昵称中是否...

    Python简易敏感词屏蔽代码

    Python作为一种功能强大且易学的编程语言,常常被用来实现这样的功能。在这个名为"敏感词屏蔽.py"的文件中,我们可以预见到一个简单的Python程序,用于检测和过滤文本中的敏感词汇。 首先,我们要了解Python的基本...

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

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

    百度SEO一键过滤违规词

    然而,对于使用中文搜索引擎,特别是百度的网站管理员和SEO专家来说,必须注意到“百度屏蔽词”、“百度违规词”以及“百度垄断词”的存在。这些词汇可能会影响到网站的排名和展示,甚至可能导致网站被百度搜索引擎...

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

    在本文中,我们将探讨如何使用ActiveXObject在JavaScript中实现一个在用户提交表单时屏蔽敏感词的功能。具体来说,实现这一功能主要包含以下步骤和知识点: 1. 引入ActiveXObject对象: 在Internet Explorer中,...

    C#高性能敏感词检测过滤组件

    该组件的主要功能是进行高效地敏感词(非法词/脏字)检测,它具备以下特性: 1. **繁体简体互换**:在中文环境中,简体和繁体字同时存在,为了确保敏感词库的全面性,组件提供了自动转换能力,使得无论输入是简体...

    java敏感词过滤功能

    在Java开发中,实现敏感词过滤功能是一项常见的需求,特别是在社交媒体、论坛或评论系统中,以防止用户发布不当或违规内容。本项目的核心是通过Java编程实现敏感词的检测和替换,确保信息的安全和合规性。 `...

    JavaScript 关键字屏蔽实现函数

    以下是一个简单的示例,展示了如何在JavaScript中实现这个功能: ```html &lt;!DOCTYPE html&gt; &lt;title&gt;JavaScript关键字屏蔽示例 ()"&gt; 检查"&gt; function test() { // 获取输入框的值 var inputValue = ...

    2018网站发帖违禁词

    4. **匹配结果处理**:如果检测到违禁词,程序可能采取替换、屏蔽、提示用户修改或直接阻止发布等多种处理方式。 5. **性能优化**:对于大型网站,由于需要处理大量并发请求,违禁词检查的效率很重要。可以通过缓存...

    自定义的钩子,监视系统中特定事件的发生,完成特定的功能,比如截获键盘、鼠标的输入,屏幕取词,日志监视等等。可见,

    1. **屏幕取词功能**:通过使用鼠标钩子,可以在用户鼠标悬停于某单词上时自动识别并显示单词的翻译或其他相关信息,类似于金山词霸的功能。 2. **键盘屏蔽功能**:利用键盘钩子可以实现在特定场景下屏蔽某些按键的...

    网页防封 防举报 防屏蔽 防红页面JS代码

    JS(JavaScript)代码作为网页动态功能的核心,常常被用来实现各种防御策略。本教程将深入探讨如何利用JS代码来增强网站的安全性,避免被封禁、举报或屏蔽。 一、理解网页防封机制 网页防封主要涉及到IP检测、用户...

    基于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中...

    易语言源码闪屏王代码.rar

    《易语言源码闪屏王代码》是一款基于易语言编程的源码项目,主要用于实现屏幕闪烁效果,同时包含了屏蔽系统功能键的功能。易语言是一种普及度较高的中文编程语言,其特点是语法简洁,易于理解,适合初学者入门。下面...

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

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

    php实现敏感词过滤类.zip

    敏感词过滤,也被称为关键词屏蔽,是通过检查用户输入的内容,找出并阻止包含特定敏感词汇的文本。这些敏感词可能包括法律禁止的、涉及个人隐私的或者有攻击性的词语。PHP实现的敏感词过滤类通常会利用数据结构如...

Global site tag (gtag.js) - Google Analytics