首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

多字符串全文匹配替换算法 如何做

2012-03-16 
多字符串全文匹配替换算法 怎么做目前用的stringreplace 在替换一条时很好用,但要有多条的话,for i:0 to

多字符串全文匹配替换算法 怎么做
目前用的 
stringreplace
 在替换一条时很好用,但要有多条的话,
for i:=0 to xx do
begin
 stringreplace....
end;
发现在要匹配的子串很多,比如说上万 十万之类。会特别慢。 用fastreplace也不理想。 因为每替换一次就要把全文扫一变。每个子串扫一次,子串多了会特别慢。
貌似有个AC 叫多模式匹配 ??自己水平有限,没法实现。求大侠给点示例代码实现快速超多子串替换。。。思路也可以~~~

[解决办法]
delphi中,也有正则表达式控件的,对字串匹配,它的算效率应该可以
其中之一
http://www.regular-expressions.info/delphi.html
你可试一下

[解决办法]
查找的数量较少的时候还是用正则吧,如果一定要自己写的话


最简单的方法是自己遍历:

Delphi(Pascal) code
//srcStr:原始字符串//targetStr:替换后的结果//fundStrArray:需要搜索的子串数组//replaceStrArray:对应的需要替换成为的字串数组srcIndex:= 1;targetStr:= "";while srcIndex <= length(srcStr) dobegin  replaced:= false;  for i:=0 to length(fundStrArray)-1  begin    if copy(srcStr,srcIndex, length(fundStrArray[i]))= fundStrArray[i] then    begin      targetStr:= targetStr+replaceStrArray[i];      replaced:= true;      srcIndex:= srcIndex+length(fundStrArray[i]);      break;    end ;  end;  if not replaced then    targetStr:= targetStr+copy(srcStr,srcIndex,1);end;
[解决办法]
如果最短的子串比较长,最好是子串一样长。
我的办法就是用哈希表了,把子串头n(应该3个以上,最好和最短子串一样长)个字节对应到一个数量远大于子串数的哈希表里。
然后用一个n个字节的窗口来对要查找的字符串求哈希函数值。
然后你应该会了吧。

热点排行