国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

高效.NET臟字過濾算法與應用實例

2024-07-10 13:31:12
字體:
來源:轉載
供稿:網友

本文實例講述了高效.NET臟字過濾算法。分享給大家供大家參考,具體如下:

BadWordsFilter.cs類

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Collections;using System.Data;namespace WNF{  public class BadWordsFilter  {    private HashSet<string> hash = new HashSet<string>(); //關鍵字    private byte[] fastCheck = new byte[char.MaxValue];    private byte[] fastLength = new byte[char.MaxValue];    private BitArray charCheck = new BitArray(char.MaxValue);    private BitArray endCheck = new BitArray(char.MaxValue);    private int maxWordLength = 0;    private int minWordLength = int.MaxValue;    public BadWordsFilter()    {    }    //初始化關鍵字    public void Init(DataTable badwords)    {      for (int j = 0; j < badwords.Rows.Count; j++)      {        string word = badwords.Rows[j][0].ToString();        maxWordLength = Math.Max(maxWordLength, word.Length);        minWordLength = Math.Min(minWordLength, word.Length);        for (int i = 0; i < 7 && i < word.Length; i++)        {          fastCheck[word[i]] |= (byte)(1 << i);        }        for (int i = 7; i < word.Length; i++)        {          fastCheck[word[i]] |= 0x80;        }        if (word.Length == 1)        {          charCheck[word[0]] = true;        }        else        {          fastLength[word[0]] |= (byte)(1 << (Math.Min(7, word.Length - 2)));          endCheck[word[word.Length - 1]] = true;          hash.Add(word);        }      }    }    public string Filter(string text, string mask)    {      throw new NotImplementedException();    }    //檢查是否有關鍵字    public bool HasBadWord(string text)    {      int index = 0;      while (index < text.Length)      {        int count = 1;        if (index > 0 || (fastCheck[text[index]] & 1) == 0)        {          while (index < text.Length - 1 && (fastCheck[text[++index]] & 1) == 0) ;        }        char begin = text[index];        if (minWordLength == 1 && charCheck[begin])        {          return true;        }        for (int j = 1; j <= Math.Min(maxWordLength, text.Length - index - 1); j++)        {          char current = text[index + j];          if ((fastCheck[current] & 1) == 0)          {            ++count;          }          if ((fastCheck[current] & (1 << Math.Min(j, 7))) == 0)          {            break;          }          if (j + 1 >= minWordLength)          {            if ((fastLength[begin] & (1 << Math.Min(j - 1, 7))) > 0 && endCheck[current])            {              string sub = text.Substring(index, j + 1);              if (hash.Contains(sub))              {                return true;              }            }          }        }        index += count;      }      return false;    }  }}

引用:

string sql = "select keywords from tb_keyword";BadWordsFilter badwordfilter = new BadWordsFilter();//初始化關鍵字badwordfilter.Init(oEtb.GetDataSet(sql).Tables[0]);//檢查是否有存在關鍵字bool a = badwordfilter.HasBadWord(TextBox1.Text);if (a == true){    Page.RegisterClientScriptBlock("a", "<script>alert('該評論含有不合法文字!')</script>");}else{    PingLun();//寫入評論表}

 

希望本文所述對大家asp.net程序設計有所幫助。


注:相關教程知識閱讀請移步到ASP.NET教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: SHOW| 小金县| 罗山县| 怀宁县| 瓦房店市| 太和县| 东乡族自治县| 蕲春县| 大名县| 元谋县| 巴马| 渭南市| 修文县| 大方县| 广东省| 库尔勒市| 芦溪县| 北宁市| 神池县| 明星| 广东省| 南溪县| 稻城县| 汉中市| 大竹县| 平南县| 西乌珠穆沁旗| 新蔡县| 当阳市| 洪湖市| 象山县| 呼玛县| 台南县| 炎陵县| 大连市| 沐川县| 特克斯县| 天台县| 洱源县| 盐池县| 娄烦县|