亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

asp.NET 臟字過濾算法 修改版

2024-07-10 13:19:13
字體:
來源:轉載
供稿:網友
舊的算法是簡單對每一個臟字調用一遍 string.replace,當然是用了StringBuilder。。在我這里測試的時候,RegEx要快一倍左右。但是還是不太滿意,應為我們網站上臟字過濾用的相當多,經過一番思考后,自己做了一個算法。在自己的機器上測試了一下,使用原文中的臟字庫,0x19c的字符串長度,1000次循環,文本查找耗時1933.47ms,RegEx用了1216.719ms,而我的算法只用了34.125ms.

算法的關鍵,還是使用空間來換時間,使用了2個全局的BitArray, 長度均為Char.MaxValue。其中一個BitArray用來判斷是否有某個char開頭的臟字,另一個BitArray用來判斷所有臟字中是否包含某個char。經過這兩個BitArray,可以做出快速判斷,之后就使用Hash Code來判斷完整的臟字,通過預先獲取的最大臟字長度優化遍歷過程。

需要的變量如下:

復制代碼 代碼如下:


private Dictionary<string, object> hash = new Dictionary<string, object>();
private BitArray firstCharCheck = new BitArray(char.MaxValue);
private BitArray allCharCheck = new BitArray(char.MaxValue);
private int maxLength = 0;


其中hash只使用到了key,value都置為null。也可以使用.NET 3.5中的HashSet,或者使用Dictionary<string, int>,記錄臟字的出現次數。

初始化這些數據的方法如下:

復制代碼 代碼如下:


foreach (string word in badwords)
{
if (!hash.ContainsKey(word))
{
hash.Add(word, null);
maxlength = Math.Max(maxlength, word.Length);
firstCharCheck[word[0]] = true;

foreach (char c in word)
{
allCharCheck[c] = true;
}
}
}


判斷臟字是否出現在一個字符串中的代碼如下:

復制代碼 代碼如下:


int index = 0;
int offset = 0;
while (index < text.Length)
{
if (!firstCharCheck[text[index]])
{
while (index < text.Length - 1 && !firstCharCheck[text[++index]]) ;
}

for (int j = 1; j <= Math.Min(maxlength, text.Length - index); j++)
{
if (!allCharCheck[text[index + j - 1]])
{
break;
}

string sub = text.Substring(index, j);

if (hash.ContainsKey(sub))
{
return true;
}
}

index++;
}

return false;


替換的代碼就不貼了,跟判斷包含類似,只不過不能發現一個臟字后就退出循環。如果出現臟字的可能不是很高,就沒有必要創建一個臨時的StringBuilder。

進一步,可以通過借鑒.NET源碼中string.GetHashCode()的實現,避免一次Substring的調用,提高性能。也可以設計遞進的HashCode實現,比如"helloworld"可以用"helloworl"的hash進一步計算,優化效率。

另外,也可以拋棄Hash,改用排序過的string[],用BinarySearch來判斷sub是否為臟字。BinarySearch的結果是可以遞進的,即可以用查找"helloworl"的結果來加速判斷"helloworld"。 (已測試,700個臟字,BinarySearch的效率有時會低很多。)
最后發一點牢騷,當初最早發的時候(),僅僅是為了說明下自己的算法,具體的代碼甚至還有一點錯誤。兩個事情讓我覺得心里不很爽,一個是被亂七八糟的無數網站轉載而不說明出處,導致我后來的改進和錯誤修正達不到效果,二是一些人都愿意看到最終的代碼,而不是理解我想要表達的最核心的設計,然后自己去考慮實現。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美一区二区三区艳史| 裸体女人亚洲精品一区| 久久亚洲国产成人| 精品久久久视频| 77777亚洲午夜久久多人| 久久久久久久久久国产| 国产精品影院在线观看| 538国产精品视频一区二区| 亚洲丁香久久久| 日韩视频免费在线| www国产亚洲精品久久网站| 一本大道久久加勒比香蕉| 欧美性猛交99久久久久99按摩| 国产成人精品一区| 亚洲free性xxxx护士白浆| 亚洲黄页网在线观看| 中日韩美女免费视频网站在线观看| 国产亚洲成av人片在线观看桃| 91精品综合视频| 亚洲а∨天堂久久精品喷水| 亚洲天堂成人在线视频| 97精品国产97久久久久久春色| 欧美激情综合色| 精品久久中文字幕久久av| 久久人人爽亚洲精品天堂| 91sao在线观看国产| 亚洲尤物视频网| 欧美激情在线观看视频| 精品视频—区二区三区免费| 中文字幕精品在线| 国产va免费精品高清在线观看| 欧美一区二三区| 精品国产一区二区在线| 亚洲人成亚洲人成在线观看| 久久精品中文字幕电影| 中文字幕国产精品| 日韩视频一区在线| 久久久久999| 欧美专区在线播放| 亚洲精品一区中文| 中文字幕视频在线免费欧美日韩综合在线看| 欧美日韩亚洲天堂| 国产亚洲精品美女| 在线色欧美三级视频| 亚洲欧美日韩精品| 91在线免费视频| 亚洲区免费影片| 日本伊人精品一区二区三区介绍| 欧美在线日韩在线| 久久久久久久久网站| 日韩美女av在线免费观看| 久久久久久九九九| 青青精品视频播放| 中文字幕在线国产精品| 欧美性生交xxxxx久久久| 日韩高清电影免费观看完整| 久久久久久久国产精品视频| 精品中文字幕在线观看| 91在线色戒在线| www.亚洲免费视频| 亚洲第一福利在线观看| 97精品一区二区视频在线观看| 福利视频一区二区| 国产精品吊钟奶在线| 成人性教育视频在线观看| 国产精品免费电影| 久久久久久999| 九色成人免费视频| 亚洲天堂av图片| 亚洲欧美色婷婷| 久久久久久久91| 欧美乱妇40p| 亚洲福利在线观看| 不卡av电影在线观看| 欧美大片网站在线观看| 国产精品美女主播| 久久综合久中文字幕青草| 亚洲精品视频中文字幕| 精品国产自在精品国产浪潮| 亚洲黄色片网站| 国产精品久久久久久久午夜| 亚洲无线码在线一区观看| 日韩高清有码在线| 亚洲综合中文字幕68页| 欧美精品亚州精品| 91亚洲永久免费精品| 亚洲午夜精品久久久久久性色| 国产视频综合在线| 欧美国产精品va在线观看| zzijzzij亚洲日本成熟少妇| 久久久国产成人精品| 久久99精品久久久久久琪琪| 国产成人综合一区二区三区| 久久久成人av| 亚洲成成品网站| 久久九九国产精品怡红院| 超碰日本道色综合久久综合| 精品成人在线视频| 国产伦精品一区二区三区精品视频| 中文字幕亚洲欧美日韩高清| 久久亚洲一区二区三区四区五区高| 亚洲精品成a人在线观看| 国产盗摄xxxx视频xxx69| 国产亚洲精品成人av久久ww| 国产精品白嫩美女在线观看| 欧洲成人在线视频| 91色精品视频在线| 国产成人亚洲综合青青| 国产日韩欧美一二三区| 欧美一级视频免费在线观看| 国产精品最新在线观看| 久久天天躁狠狠躁夜夜躁| 欧亚精品在线观看| 成人精品一区二区三区电影黑人| 亚洲欧美日韩在线一区| 欧美日韩亚洲精品一区二区三区| 超碰日本道色综合久久综合| 亚洲国产欧美一区| 欧美成人久久久| 欧美激情国产日韩精品一区18| 国产成人精品亚洲精品| 国产精品久久久久久网站| 亚洲国产日韩精品在线| 亚洲精品一二区| 高清欧美电影在线| 精品国产依人香蕉在线精品| 97精品久久久中文字幕免费| 国内免费精品永久在线视频| 自拍亚洲一区欧美另类| 亚洲成人1234| 欧美日韩国产成人| 成人h视频在线观看播放| 欧美怡春院一区二区三区| 午夜精品久久久久久久99热| 国产精品一区专区欧美日韩| 日本成熟性欧美| 日韩小视频网址| 欧美激情手机在线视频| 欧美日韩国产成人在线观看| 97视频在线观看免费| 亚洲国产99精品国自产| 国产精品激情av电影在线观看| www.日本久久久久com.| 色在人av网站天堂精品| 日韩精品在线视频观看| 91po在线观看91精品国产性色| 91久久嫩草影院一区二区| 最新69国产成人精品视频免费| 久久99精品久久久久久噜噜| 亚洲直播在线一区| 欧美成人免费观看| 亚洲欧美国产精品久久久久久久| 高清欧美性猛交xxxx黑人猛交| 亚洲成色777777女色窝| 欧美日韩国产丝袜美女| 亚洲韩国青草视频| 精品偷拍各种wc美女嘘嘘| 亚洲视屏在线播放| 欧美裸身视频免费观看| 97婷婷大伊香蕉精品视频| 精品欧美激情精品一区| 日韩精品在线观看一区| 亚洲最新av在线网站| www.久久久久|