再度改進,在髒字可能存在的情況下,例如出現了多個髒字前length-1部分時,效能相比http://www.cnblogs.com/xingd/archive/2008/01/31/1060425.html
中描述的又提公升了300%~400%。
直接貼出全部**了,通過新增的乙個byte[char.maxvalue]和bitarray(char.maxvalue),減少了大量的substring和gethashcode的呼叫。耗的記憶體也不算多,除hashset外,僅需要144k記憶體。
引用此文或者使用此**請說明出處,謝謝,以便於我將來的更新。
2008-02-02修訂:if (index > 0 || (fastcheck[text[index]] & 1) == 0) 應去掉index > 0的判斷,這個優化考慮的不夠成熟。感謝sumtec和靈感之源指出錯誤。避免最短匹配時,可以在 if (hash.contains(sub)) 之後,可以加入判斷 if ((fastlength[begin] >> math.min(j,7)) == 0),然後再return true。
2008-02-03修訂:for迴圈內部的if
((fastcheck[current] &1
) ==
0)應為if
((fastcheck[current] &1
) ==
0 && count == j
)。修正bug並加入大小寫敏感後,效率降低1倍。
public
class
badwordsfilter
public
void
init(
string
badwords)
for(
inti =7
; i
<
word.length; i++)
if(word.length ==1
)else}}
public
string
filter(
string
text,
string
mask)
public
bool
hasbadword(
string
text)
char
begin
=text[index];
if(minwordlength ==1
&&charcheck[begin])
for(
intj =1
; j
<=
math.min(maxwordlength, text.length
-index -1
); j++)
if((fastcheck[current] &(
1<<
math.min(j,
7))) ==0
)if(j +
1>=
minwordlength)}}
}index
+=count;
}return
false;}
}
過濾非法字元
using system using system.componentmodel using system.collections using system.diagnostics using system.data using system.data.sqlclient using system....
正則過濾非法字元
小寫英文 大寫英文 任意數字 限2位小數 如 123.12 日 期 如 2002 9 29 任意中文 部分英文 範圍 a,b,c,d,e 部分中文 範圍 一二三四五六七 十 有關正規表示式 只能輸入數字和英文的 只能輸入數字的 只能輸入全形的 只能輸入漢字的 d 非負整數 正整數 0 0 9 1 9...
iOS過濾非法字串
碰到在搜尋框中過濾非法字元的問題,傳統的用while迴圈來操作就顯得太繁瑣,ios 的 nsstring 裡有相關的方法可以解決此問題。如下 nscharacterset donotwant nscharacterset charactersetwithcharactersinstring temp...