關于臟字典過濾問題-用正則表達式來過濾臟數據
方法一:使用正則表達式
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
}
//臟字典數據存放文件路徑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;
}
}以下是測試的方法,有什么問題還大家請指出!
1
DateTime 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+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";
28
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";
29
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";
30
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";
31
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";
32
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";
33
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";
34
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";
35
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";
36
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";
37
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";
38
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";
39
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";
40
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";
41
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";
42
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";
43
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";
44
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";
45
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";
46
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";
47
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";
48
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";
49
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";
50
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";
51
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";
52
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() ;
DateTime 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+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";28
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";29
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";30
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";31
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";32
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";33
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";34
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";35
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";36
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";37
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";38
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";39
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";40
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";41
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";42
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";43
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";44
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";45
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";46
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";47
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";48
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";49
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";50
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";51
str+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";52
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() ;|
算法 |
檢索文本文件長度 / 耗費時間(ms) |
||
|
正則算法 |
10個漢字/ 980 |
100個漢字/999 |
1000個漢字/1234 |
|
普通算法 |
10個漢字/ 234 |
100個漢字/234 |
1000個漢字/265 |
臟字典下載


浙公網安備 33010602011771號