免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
C#過濾敏感詞DFA算法

今天游戲正好用到需要過濾敏感詞將出現(xiàn)的敏感詞替換成*,在網(wǎng)上找了許久找了一片可用的java版本的DFA算法,最后費了一番功夫將其思路用C#實現(xiàn),里面的注釋甚至都沒改動的,這里直接上代碼,這里不借助任何第三方工具,復制粘貼就是用

當然想看原博客的點擊這里

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;        //迭代keyWordSet        foreach (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;        //匹配標識數(shù)默認為0        int matchFlag = 0;        char word = '0';        object nowMap = wordMap;        char[] words = txt.ToCharArray();        for (int i = beginIndex; i < words.Length; i  )        {            word = words[i];            //獲取指定key            if (((Dictionary<object, object>)nowMap).ContainsKey(word.ToString())) {                //存在,則判斷是否為最后一個                //找到相應key,匹配標識 1                nowMap = ((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))                    {                        //如果為最后一個匹配規(guī)則,結束循環(huán),返回匹配標識數(shù)                        //結束標志位為true                        flag = true;                        if (1 == matchType)                        {                            //最小規(guī)則,直接返回,最大規(guī)則還需繼續(xù)查找                            break;                        }                    }                }            }            else            {     //不存在,直接返回                break;            }        }              if (!flag)        {            matchFlag = 0;        }        return matchFlag;    } }

下面是是敏感詞庫,其實就是一個.txt文件大家自己創(chuàng)建就行我這內容也不多上個截圖就好

好了今天就這么多

來源:https://www.icode9.com/content-1-443701.html
本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Java中Set的contains()方法
if-else優(yōu)化實踐總結
Java 如何重寫對象的 equals 方法和 hashCode 方法
string str=null與 string str=""區(qū)別
貪心算法 --- 集合覆蓋問題
instanceof 運算符的用法
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服