ASP.NET网站制作之.NET脏字过滤算法,晋级版仓酷云
对于new隐藏成员的作用,往往是出于使用了一个第三方类库,而你又无法获得这个类库的源代码,当你继承这个类库的某个类时,你需要重新实现其中的一个方法,而又需要与父类中的函数使用同样的函数,这是就需要在自定义的子类中把那个同名函数(或成员)加上new标记,从而隐藏父类中同名的成员。再度改善,在脏字大概存在的情形下,比方呈现了多个脏字前Length-1部分时,功能比拟/dotnet/20111127/315436.html中形貌的又提拔了300%~400%。间接贴出全体代码了,经由过程新增的一个byte和BitArray(char.MaxValue),削减了大批的Substring和GetHashCode的挪用。耗的内存也不算多,除HashSet外,仅必要144k内存。
援用此文大概利用此代码请申明出处,感谢,以便于我未来的更新。
2008-02-02订正:if(index>0||(fastCheck]&1)==0)应往失落index>0的判别,这个优化思索的不敷成熟。感激sumtec和灵感之源指堕落误。制止最短婚配时,能够在if(hash.Contains(sub))以后,能够到场判别if((fastLength>>Math.Min(j,7))==0),然后再returntrue。
2008-02-03订正:for轮回外部的if((fastCheck&1)==0)应为if((fastCheck&1)==0&&count==j)。修改bug并到场巨细写敏感后,效力下降1倍。
publicclassBadWordsFilter
{
privateHashSet<string>hash=newHashSet<string>();
privatebyte[]fastCheck=newbyte;
privatebyte[]fastLength=newbyte;
privateBitArraycharCheck=newBitArray(char.MaxValue);
privateBitArrayendCheck=newBitArray(char.MaxValue);
privateintmaxWordLength=0;
privateintminWordLength=int.MaxValue;
publicBadWordsFilter()
{
}
publicvoidInit(string[]badwords)
{
foreach(stringwordinbadwords)
{
maxWordLength=Math.Max(maxWordLength,word.Length);
minWordLength=Math.Min(minWordLength,word.Length);
for(inti=0;i<7&&i<word.Length;i++)
{
fastCheck]|=(byte)(1<<i);
}
for(inti=7;i<word.Length;i++)
{
fastCheck]|=0x80;
}
if(word.Length==1)
{
charCheck]=true;
}
else
{
fastLength]|=(byte)(1<<(Math.Min(7,word.Length-2)));
endCheck]=true;
hash.Add(word);
}
}
}
publicstringFilter(stringtext,stringmask)
{
thrownewNotImplementedException();
}
publicboolHasBadWord(stringtext)
{
intindex=0;
while(index<text.Length)
{
intcount=1;
if(index>0||(fastCheck]&1)==0)
{
while(index<text.Length-1&&(fastCheck]&1)==0);
}
charbegin=text;
if(minWordLength==1&&charCheck)
{
returntrue;
}
for(intj=1;j<=Math.Min(maxWordLength,text.Length-index-1);j++)
{
charcurrent=text;
if((fastCheck&1)==0)
{
++count;
}
if((fastCheck&(1<<Math.Min(j,7)))==0)
{
break;
}
if(j+1>=minWordLength)
{
if((fastLength&(1<<Math.Min(j-1,7)))>0&&endCheck)
{
stringsub=text.Substring(index,j+1);
if(hash.Contains(sub))
{
returntrue;
}
}
}
}
index+=count;
}
returnfalse;
}
}前几天同学问我学习方向的问题。有点想法,不知道对不对,怕误导同学,现在“开源一下”。注:括号内是我现在整理的时填加上的。 代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。 能产生和执行动态、交互式、高效率的站占服务器的应用程序。运用ASP可将VBscript、javascript等脚本语言嵌入到HTML中,便可快速完成网站的应用程序,无需编译,可在服务器端直接执行。容易编写。 在asp.net虚拟主机的服务提供商中,目前首推的是CNNIC的其中一家域名注册机构---时代互联(www.now.net.cn),他们早在2001年微软刚推出Asp.net时就推出了对应的Asp.net虚拟主机了,经笔者的使用测试,他提供的Asp.net性能非常的稳定,版本也会定期的更新,目前他的 代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。 现在主流的网站开发语言无外乎asp、php、asp.net、jsp等。 Asp.net:首先来说,Asp.net和Asp没什么关系,看着像是升级版本什么的,其实没什么联系。Asp是脚本编程,用的是ASP语言,而ASP.net用的是C#语言,完全不同的东西。 平台无关性是PHP的最大优点,但是在优点的背后,还是有一些小小的缺点的。如果在PHP中不使用ODBC,而用其自带的数据库函数(这样的效率要比使用ODBC高)来连接数据库的话,使用不同的数据库,PHP的函数名不能统一。这样,使得程序的移植变得有些麻烦。不过,作为目前应用最为广泛的一种后台语言,PHP的优点还是异常明显的。 ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码。 这也就是最近几年来随着各种新的后台技术的诞生,CGI应用在Internet上越来越少的原因。CGI方式不适合大访问量的应用。 现在主流的网站开发语言无外乎asp、php、asp.net、jsp等。 虽然在形式上JSP和ASP或PHP看上去很相似——都可以被内嵌在HTML代码中。但是,它的执行方式和ASP或PHP完全不同。在JSP被执行的时候,JSP文件被JSP解释器(JSPParser)转换成Servlet代码,然后Servlet代码被Java编译器编译成.class字节文件,这样就由生成的Servlet来对客户端应答。所以,JSP可以看做是Servlet的脚本语言(ScriptLanguage)版。
页:
[1]