zoukankan      html  css  js  c++  java
  • 转:关于脏字典过滤问题-用正则表达式来过滤脏数据

    方法一:使用正则表达式
      
       1//脏字典数据存放文件路径
       2 private static string FILE_NAME="zang.txt";
       3 //脏数据字典表,如:脏数据一|脏数据二|脏数据三
       4 public static string dirtyStr="";
       5
       6 public ValidDirty()
       7 {
       8 if (HttpRuntime.Cache["Regex"]==null)
       9 {
      10 dirtyStr=ReadDic();
      11 //用于检测脏字典的正则表达式
      12 Regex validateReg= new Regex("^((?!"+dirtyStr+").(?<!"+dirtyStr+"))*$",RegexOptions.Compiled|RegexOptions.ExplicitCapture);
      13 HttpRuntime.Cache.Insert("Regex" ,validateReg,null,DateTime.Now.AddMinutes(20) ,TimeSpan.Zero);
      14 }
      15
      16 }
      17 private string ReadDic()
      18 {
      19 FILE_NAME=Environment.CurrentDirectory+"\\"+FILE_NAME;
      20
      21 if (!File.Exists(FILE_NAME))
      22 {
      23 Console.WriteLine("{0} does not exist.", FILE_NAME);
    24 return "";
      25 }
      26 StreamReader sr = File.OpenText(FILE_NAME);
      27 String input="";
      28 while (sr.Peek() > -1)
      29 {
      30 input += sr.ReadLine() ;
      31 }
      32
      33 sr.Close();
      34 return input;
      35
      36 }
      37
      38
      39 public bool ValidByReg(string str)
      40 {
      41 Regex reg=(Regex)HttpRuntime.Cache["Regex"];
      42 return reg.IsMatch(str) ;
      43
      44 }
      
      感觉这种方法的执行效率不是很高,简单的测试了一下 1000字的文章,脏字典有800多个关键字
      式了一下是 1.238秒,大家有没有更好的方法,请不吝赐教!
    方法二:普通循环查找方法
      
       public bool ValidGeneral(string str)
       {
      
       if(!File.Exists(FILE_NAME))
       {
       Console.WriteLine("文件路径或者文件路径不存在错误信息") ;
       return false;
       }
       else
       {
       StreamReader objReader = new StreamReader(FILE_NAME,System.Text.Encoding.GetEncoding("gb2312"));
       string sLine="";
       ArrayList arrText = new ArrayList();
      
       while (sLine != null)
       {
       sLine = objReader.ReadLine();
       if (sLine != null)
       arrText.Add(sLine);
      
       }
       objReader.Close();
    foreach (string sOutput in arrText)
       {
       string[] strArr=sOutput.Split('|');
      
       for (int i = 0; i < strArr.Length; i++)
       {
       if (str.IndexOf(strArr[i])!=-1)
       {
       return false;
       }
      
       }
      
       }
       return true;
      
       }
      
       }
      
      以下是测试的方法,有什么问题还大家请指出!
      
       1DateTime t1 =DateTime.Now;
       2 string str="213";
    3 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
       4 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
       5 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
       6 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
       7 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
       8 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
       9 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
      10 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
      11 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
      12 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
      13 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
      14 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
      15 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
      16 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
      17 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
      18 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
      19 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
      20 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
      21 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
      22 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
      23 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
      24 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
      25 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
      26 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋";
      27 str+="珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋珍惜水晶之恋"; 
     53 ValidDirty vd=new ValidDirty() ;
      54 Console.WriteLine(vd.ValidByReg(str)) ;
      55 DateTime t2 =DateTime.Now;
      56 TimeSpan ts=t2-t1;
      57 Console.WriteLine(ts.TotalMilliseconds) ;
      58 Console.Read() ;
  • 相关阅读:
    Mac zsh: command not found zsh 所有命令在终端失效
    Java根据FreeMarker模板生成Word(doc)文档(带图片)
    2021年Java面试总结——自我篇
    toArray转换踩坑 java.lang.ClassCastException
    并发和并行
    protoBuf3学习
    StringBuffer和StringBuilder区别
    深拷贝和浅拷贝
    从不订购的客户
    使用jenkins遇到的问题汇总
  • 原文地址:https://www.cnblogs.com/yamajia/p/831384.html
Copyright © 2011-2022 走看看