今天游戏正好用到需要过滤敏感词将出现的敏感词替换成*,在网上找了许久找了一片可用的java版本的DFA算法,最后费了一番功夫将其思路用C#实现,里面的注释甚至都没改动的,这里直接上代码,这里不借助任何第三方工具,复制粘贴就是用

当然想看原博客的点击这里


using UnityEngine;
using System.Collections.Generic;
public class Test : MonoBehaviour
{public TextAsset txt;private void Start(){}private void Update(){if (Input.GetKeyDown("x")) {string str = "后来的啊微信哈哈嘀嘀嘀微信qqwx呼呼呵呵";HashSet<string> set = ReadTxtByLine(txt);Dictionary<object, object> map = AddBadWordToHashMap(set);string set1 = GetBadWord(str, 2, map);print(set1);}}private HashSet<string> ReadTxtByLine(TextAsset file) {//使用换行和回车符分割敏感词string[] str = file.text.Split('\n','\r');HashSet<string> setTemp = new HashSet<string>();if (str != null) {foreach (string s in str){setTemp.Add(s);}}return setTemp;}private Dictionary<object, object> AddBadWordToHashMap(HashSet<string> keyWordSet){//初始化敏感词容器,减少扩容操作Dictionary<object, object> wordMap = new Dictionary<object, object>(keyWordSet.Count);string key = null;Dictionary<object,object> nowMap = null;Dictionary<object, object> newWorMap = null;//迭代keyWordSetforeach (var v in keyWordSet) {key = v;nowMap = wordMap;char[] keyChars = key.ToCharArray();for (int i = 0; i < keyChars.Length; i++) {//转换成char型char keyChar = keyChars[i];//如果存在该key,直接赋值if (nowMap.ContainsKey(keyChar.ToString())) {nowMap = wordMap;}else{//不存在则,则构建一个map,同时将isEnd设置为0,因为他不是最后一个newWorMap = new Dictionary<object, object>();//不是最后一个newWorMap.Add("isEnd", "0");nowMap.Add(keyChar.ToString(), newWorMap);nowMap = newWorMap;}if (i == keyChars.Length - 1){//最后一个if (nowMap.ContainsKey("isEnd")) {nowMap.Remove("isEnd");}nowMap.Add("isEnd", "1");}}}return wordMap;}public string GetBadWord(string txt, int matchType, Dictionary<object, object> wordMap){char[] c = txt.ToCharArray();for (int i = 0; i < txt.Length; i++){//判断是否包含敏感字符int length = CheckBadWord(txt, i, matchType, wordMap);if (length > 0){string oldStr = txt.Substring(i, length);//替换敏感词for (int j = 0; j < length; j++) {c[j + i] = '*';}//减1的原因,是因为for会自增i = i + length - 1;}}return new string(c);}private int CheckBadWord(string txt, int beginIndex, int matchType, Dictionary<object, object> wordMap){//敏感词结束标识位:用于敏感词只有1位的情况bool flag = false;//匹配标识数默认为0int matchFlag = 0;char word = '0';object nowMap = wordMap;char[] words = txt.ToCharArray();for (int i = beginIndex; i < words.Length; i++){word = words[i];//获取指定keyif (((Dictionary<object, object>)nowMap).ContainsKey(word.ToString())) {//存在,则判断是否为最后一个//找到相应key,匹配标识+1nowMap = ((Dictionary<object, object>)nowMap)[word.ToString()];matchFlag++;if (((Dictionary<object, object>)nowMap).ContainsKey("isEnd")) {string temp = (string)((Dictionary<object, object>)nowMap)["isEnd"];if ("1".Equals(temp)){//如果为最后一个匹配规则,结束循环,返回匹配标识数//结束标志位为trueflag = true;if (1 == matchType){//最小规则,直接返回,最大规则还需继续查找break;}}}}else{     //不存在,直接返回break;}}if (!flag){matchFlag = 0;}return matchFlag;}}

下面是是敏感词库,其实就是一个.txt文件大家自己创建就行我这内容也不多上个截图就好

好了今天就这么多

C#过滤敏感词DFA算法相关推荐

  1. 使用数据结构过滤敏感词算法

    前缀树 名称:Tire.字典树.查找树 特点:查找效率高,消耗内存大 应用:字符串检索.词频统计.字符串排序等 敏感词过滤器 定义前缀树 package com.nowcoder.community. ...

  2. python过滤敏感词记录

    简述: 关于敏感词过滤可以看成是一种文本反垃圾算法,例如 题目:敏感词文本文件 filtered_words.txt,当用户输入敏感词语,则用 星号 * 替换,例如当用户输入「北京是个好城市」,则变成 ...

  3. php过滤敏感词实例代码

    php过滤敏感词实例代码 <?php   /**     * Created by JetBrains PhpStorm.     * User: lsl     * Date: 13-8-28 ...

  4. flex java 全局拦截_flex + java 过滤敏感词

    过滤敏感词这个相对比较容易做到,网上也很多方法,看得比较多的一个方法就是:把所有的敏感词写入到一个properties文件中,程序启动时拼成一个正则表达式.这个也只是比较基础的敏感词过滤器,比较强大的 ...

  5. python过滤敏感词汇_利用Python正则表达式过滤敏感词的方法

    利用Python正则表达式过滤敏感词的方法 问题描述:很多网站会对用户发帖内容进行一定的检查,并自动把敏感词修改为特定的字符. 技术要点: 1)Python正则表达式模块re的sub()函数: 2)在 ...

  6. ios 弹幕过滤敏感词方案对比和性能测试

    在看视频的过程中, 很多用户会发弹幕, 当前用户可以设置过滤敏感词和敏感用户,  设置后, 命中敏感词和敏感用户的弹幕就不会显示. 敏感词和敏感用户的设置上限为各100. 由客户端进行过滤, 不区分大 ...

  7. php敏感字符串过滤_PHP的一个过滤敏感词或脏话的方法

    PHP的一个过滤敏感词或脏话的方法 主要使用了  int substr_count ( string haystack, string needle [, int offset [, int leng ...

  8. 第三章:过滤敏感词、帖子管理

    过滤敏感词 根节点没有字符,到最末节点拼起来才是敏感字符,做一个标记在最后. 过滤符号 /* * 过滤敏感词 * 参数:待过滤的文本, 返回过滤后的文本 * */ public String filt ...

  9. SpringBoot使用前缀树过滤敏感词

    前缀树 Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的优点是:利 ...

最新文章

  1. slicer安装_3D Slicer教程【软件安装及设置】
  2. Rancher--Docker容器管理工具的安装与启动
  3. Mybatis 拦截器报错
  4. 基于华为路由器实现NAT
  5. 晚上几点睡才叫“熬夜”?给你“答案”,很多人都想错了
  6. SE91 SAP消息类型
  7. android调用系统录制视频教程,Android开发之使用MediaRecorder录制视频,android视频录制...
  8. 计算机图像处理要学什么软件有哪些,电脑中常用的图像处理软件有哪些
  9. 阿拉伯数字转中文大写的方法
  10. TableLayout表格布局详解
  11. 微信小程序 -数字滚动动画
  12. java.lang.IllegalArgumentException介绍
  13. Unity Instantiate函数用于复制对象
  14. 武汉理工大学计算机考博往年试题,2017年武汉理工大学考博英语真题
  15. 最大流最小割定理(max flow/min cut theory)
  16. ChatGPT这么火,如果ChatGPT滥用或者重度依赖,会怎么样?
  17. 把吃出来的病吃回去 张悟本_0826分享把吃出来的病吃回去电子书txt 网盘下载
  18. VS 2019中利用C#语言在.Net Framework 4.5框架上开发简易倒计时器
  19. 什么事webshell?
  20. win10改win7后usb键盘鼠标都不能用

热门文章

  1. [毕业设计]LaTeX论文模板排版
  2. 【日常计算机问题记录】装系统时烧录的u盘如何恢复正常
  3. STM32 LCD12864 原理和实现代码
  4. 下载安装WindowBuilder插件教程
  5. Hadoop权威指南——关于Sqoop
  6. C#用NPOI插件对Excel数据的生成各类Chart的绑定/生成
  7. anylogic系统动力java工具_AnyLogic Professional 8.7  最新授权
  8. meteor构建app程序_在Meteor.js中构建Slack克隆:实时数据
  9. ERPS环网络端口角色
  10. django的优缺点