方法一:使用正規表示式
1//隱藏資料存放檔案路徑
2 私人靜態字串FILE_NAME="zang.txt";
3 // 髒資料字典表,如:髒資料一|髒資料二|髒資料三
4 公共靜態字串 dirtyStr="";
5
6 公共 ValidDirty()
7 {
8 if (HttpRuntime.Cache["Regex"]==null)
9 {
10、dirtyStr=ReadDic();
11 //用於偵測字典的正規表示式
12 正規表示式 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 私有字串ReadDic()
18{
19 FILE_NAME=Environment.CurrentDirectory+" \"+FILE_NAME ;
20
21 if (!File.Exists(FILE_NAME))
22{
23 Console.WriteLine("{0}不存在。", FILE_NAME);
24返回“”;
25}
26 StreamReader sr = File.OpenText(FILE_NAME);
27 字串輸入=“”;
28 while (sr.Peek() > -1)
29{
30 輸入 += sr.ReadLine() ;
31}
32
33 sr.關閉();
34返回輸入;
35
36}
37
38
39 public bool ValidByReg(字串 str)
40{
41 正規表示式 reg=(Regex)HttpRuntime.Cache["Regex"];
42 返回 reg.IsMatch(str) ;
43
44 }
感覺這種方法的執行效率不太好,簡單的測試頁面1000字的文章,藏字典有800多個關鍵字式頁面是1.238秒,大家沒有更好的方法,請不吝賜教
!一般迴圈查找方法
public bool ValidGeneral(string str)
{
if(!File.Exists(FILE_NAME))
{
Console.WriteLine("檔案路徑或檔案路徑不存在錯誤訊息") ;
返回假;
}
別的
{
StreamReader objReader = new StreamReader(FILE_NAME,System.Text.Encoding.GetEncoding("gb2312"));
字串 sLine="";
ArrayList arrText = new ArrayList();
while (sLine != null)
{
sLine = objReader.ReadLine();
if (sLine != null)
arrText.Add(sLine);
}
objReader.Close();
foreach(arrText 中的字串 sOutput)
{
string[] strArr=sOutput.Split('|');
for (int i = 0; i < strArr.Length; i++)
{
if (str.IndexOf(strArr[i])!=-1)
{
返回假;
}
}
}
返回真;
}
}
以下是測試的方法,有什麼
問題還請大家指出!
2 字串 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 日期時間 t2 =日期時間.Now;
56 時間跨度 ts=t2-t1;
57 Console.WriteLine(ts.TotalMilliseconds);
58 Console.Read();
演算法 |
檢索文字檔案長度/ 成分時間( ms ) |
正規表示式 |
10 個漢字/980 |
100 個漢字/999 |
1000 個漢字/1234 |
普通演算法 |
10 個漢字/234 |
100 個漢字/234 |
1000 個漢字/265 |
髒字典下載