方法一:使用正則表達式
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+"http://"+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+="珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀珍惜水晶之戀";
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 |
新聞熱點
疑難解答