asp.net C# 关键字过滤程序代码

 代码如下 复制代码

例1

  /// <summary>
        /// 过滤关键字
        /// </summary>
        /// <param name="value">过滤字眼,用| 隔开</param>
        /// <param name="text">传入要过滤的数据</param>
        /// <returns></returns>
        public List<string> FriterText(string value, string text)
        {
            List<string> FriterList = new List<string>();
            String regex = string.Format("({0})", value);
            //String regex = "(插你|企业|企业家)";
            Regex rg = new Regex(regex);
            if (rg.IsMatch(text))
            {
                MatchCollection mc = rg.Matches(text);
                foreach (var item in mc)
                {
                    if (!FriterList.Contains(item.ToString()))
                        FriterList.Add(item.ToString());
                }
            }
            return FriterList;
        }

例1

class Program
{
static void Main(string[] args)
{
string keys = "云风博客|并发问题|最烂的方法|内存|集合|数据库|性能";

using (new OperationTimer("keyWords:"))
{
WordSearch ws = new WordSearch(keys);
string str = "看云风博客关于解决12306并发问题的启发:我现在做骏卡接口,可能出现并发问题,就是一个订单可能向我们的接口发送多个请求,而我现在做的方法是去数据库中对应的表验证,看订单是否存在,如果存在就提示一下,如果不存在按流程走,但是这个样每来一个订单我都需要去数据库查,如果我在内存中维护一个订单集合,这样就能很快解决判断订单是否存在的问题,惯性思维太严重了,什么都去数据库查,这样的性能是最差的,其实很多问题在内存中就可以搞定的,最近还有一个特别感受,不要做井底之蛙,多看牛人的东西收获真的比自己埋头写代码进步快很多,其实很多时候我写的程序性能差,效率低都是因为方法的原因,没有找到好的方法,没有灵光一闪的感觉,用了最烂的方法解决问题";
ConsoleColor color = Console.ForegroundColor;
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("原文:");
Console.ForegroundColor = color;
Console.WriteLine(str);
Console.WriteLine();
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("过滤后:");
Console.ForegroundColor = color;
Console.WriteLine(ws.Filter(str));
}
Console.Read();
}
}

例3

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Collections;

namespace BLL.Common
{
    #region 操作类
    public class KeywordsFilter
    {
       

        #region 关键字过滤
        /// <summary>
        /// 关键字过滤
        ///
        /// </summary>
        /// <param name="keywords"></param>
        /// <returns></returns>
        public static string Filter(string keywords)
        {
 
            //需过滤关键字集合
            List<string> badwords = new List<string>();
           
            KeywordsFilterClass kf = new KeywordsFilterClass();
            keywords = kf.BadwordInKeywords(keywords, badwords);
            return keywords;
        }
        #endregion

    }
    #endregion

    #region 关键字过滤类
    /// <summary>
    /// 关键字过滤类
    /// </summary>
    public class KeywordsFilterClass
    {

        private Dictionary<string, object> hash = new Dictionary<string, object>();
        //脏字字典 开头脏字存储
        private BitArray firstCharCheck = new BitArray(char.MaxValue);
        //脏字字典 单个char存储
        private BitArray allCharCheck = new BitArray(char.MaxValue);
        private int maxLength = 0;

        /// <summary>
        /// 初始化 已存储的 过滤字符串
        /// </summary>
        /// <param name="words"></param>
        private void InitHash(List<string> badwords)
        {
            foreach (string word in badwords)
            {
                //保存字典内不存在的脏字
                if (!hash.ContainsKey(word))
                {
                    hash.Add(word, null);
                    //设置脏字计算长度
                    this.maxLength = Math.Max(this.maxLength, word.Length);
                    firstCharCheck[word[0]] = true;
                    foreach (char c in word)
                    {
                        allCharCheck[c] = true;
                    }
                }
            }

        }
        /// <summary>
        /// 替换字符串中的脏字为指定的字符
        /// </summary>
        /// <param name="text"></param>
        /// <returns></returns>
        public string BadwordInKeywords(string text, List<string> badwords)
        {
            //初始化 脏字字典
            this.InitHash(badwords);
            int index = 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))
                    {
                        text = text.Replace(sub, "**");
                        //this.InitHash(badwords);
                        index += j;
                        break;
                    }
                }

                index++;
            }
            return text;
        }

    }
    #endregion
}

时间: 2024-09-16 10:18:46

asp.net C# 关键字过滤程序代码的相关文章

ASP连接SQL Server数据库程序代码

在ASP中数据库链接2中方法 1.直接用字符串链接,代码如下:  代码如下 复制代码 <% '连接数据库 Dim conn Set conn = Server.CreateObject("ADODB.Connection") conn.Open "driver={SQL Server};server=主机ip地址; uid=用户名;pwd=密码;database=数据库名" %> 2.利用DSN(数据源)链接,这种方法你要先创建一个DSN,创建方法点击服

asp.net中通用数据库连接程序代码

View Code  代码如下 复制代码 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <center> <h2><font face="宋体">访问数据库的通用代码示例</font> </h2&g

ASP+ajax注册即时提示程序代码_应用技巧

1.注册时验证数据库用户名是否存在. 2.输入密码时提示密码强度和验证2次密码输入是否一样. 3.注册时验证数据库联系邮箱是否存在. 4.注册时验证用户输入的验证码和系统产生的验证码是否一致. 5.对输入中文验证 6.QQ号码验证 7.身份证号码验证 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtm

ASP+ajax注册即时提示程序代码

1.注册时验证数据库用户名是否存在. 2.输入密码时提示密码强度和验证2次密码输入是否一样. 3.注册时验证数据库联系邮箱是否存在. 4.注册时验证用户输入的验证码和系统产生的验证码是否一致. 5.对输入中文验证 6.QQ号码验证 7.身份证号码验证 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtm

asp.net C#解压缩/文件程序代码

解压缩单个文件  代码如下 复制代码 using System.IO; using System.IO.Compression; string sourceFile=@"D:2.zip"; string destinationFile=@"D:1.txt";         private const long BUFFER_SIZE = 20480;             // make sure the source file is there        

非法字符过滤程序代码

 public badWordFilter  '给badWordfilter 增加要过滤字符  Public Function FilterBadWord(str)   If str = "" Or IsNull(str) Then    FilterBadWord = ""    Exit Function   End If   Dim i,badWordSplit,filterSplit   badWordSplit = Split(Cfg.badWordFil

asp.net中datagrid遍历程序代码

最常用最简单的datagrid遍历:  代码如下 复制代码 foreach(DataGridItem   oItem   in   ItemsGrid.Items)   {          CheckBox   ck1   =     (CheckBox)oItem.FindControl("CheckBox");    if(ck1.Checked   ==   true)    {    } } 当然还可以利用for,while来遍历这个控件了,这里就不说多了.

asp 删除指定记录程序代码

这是一款asp教程 删除指定记录程序代码哦,实例由点击连接到删除页面,并且执行删除, <% 数据库教程连接 sub opendb() set rs=server.CreateObject("adodb.recordset") set conn=server.CreateObject("adodb.connection") conn.connectionstring="provider=microsoft.jet.oledb.4.0; data sou

Z-BLOG屏蔽敏感关键字功能的代码

下面是ZBLOG的屏蔽评论中敏感关键字的程序代码,主要用于替换文章评论中的敏感或非法的关键字. 只需要修改一个文件c_system_event.asp,将其中的objComment.Content=Request.Form("inpArticle")修改为objComment.Content=WordFilter(Request.Form("inpArticle")) 然后在c_system_event.asp文件尾部加入代码: Function WordFilte