分析字符串替换的高效方法

这个是对aspnet4.chm的分析,太忙了 ~放个分析原谅我啊 02.gif

None.gif // --T是比较大的字符串,P是比较小的字符串,i是检索的位置---T是原始数据,p则是搜索的字符串
None.gif
private   static   int  IndexOf2( string  T,  string  P,  int  i) // --这个函数就是检索p在T中出现的位置
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
//--step是比对次数,i是开始比对的地方
InBlock.gif
    int step = T.Length-P.Length;
InBlock.gif    
for ( ; i <= step ; ++i )
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif
//--------在大字符串中开始搜索小的字符串
InBlock.gif
        for ( int j=0 ; j < P.Length ; ++j )
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif
//------当大字符串中索引中基数 i+j 变动数据不等于 小字符串中的字符中任何一位则跳出循环
InBlock.gif
            if ( T[i+j] != P[j] )
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
goto LOOP;
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

InBlock.gif    
//---如果这句话被运行则代表找到了
InBlock.gif
        return i;
InBlock.gif        LOOP:;
ExpandedSubBlockEnd.gif    }

InBlock.gif    
return -1;
ExpandedBlockEnd.gif}

None.gif
// --这里的测试下不太清楚是什么意思-----原始数据-- -将要被替换的数据-----替换的字符串
None.gif
private   static   string  ReplaceEx2( string  original,  string  pattern,  string  replacement)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
int count, position0, position1;
InBlock.gif    count 
= position0 = position1 = 0;
InBlock.gif    
string upperString = original.ToUpper();
InBlock.gif    
string upperPattern = pattern.ToUpper();---这里 
InBlock.gif    
int inc = (original.Length/pattern.Length)*(replacement.Length-pattern.Length);
InBlock.gif    
char [] chars = new char[original.Length + Math.Max(0, inc)];
InBlock.gif    
while( (position1 = IndexOf2(upperString, upperPattern, position0)) != -1 )
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif    
//---在这里复制开始到找到字符串的位置,
InBlock.gif
        for ( int i=position0 ; i < position1 ; ++i ) chars[count++= original[i];
InBlock.gif    
//--这里开始是替换,实际上是接着上面的数据chars[count++]的地方开始写数据-写的长度是整个替换字符串
InBlock.gif
        for ( int i=0 ; i < replacement.Length ; ++i ) chars[count++= replacement[i];
InBlock.gif        
//==position0-实际上就是找的位置加上要替换字符串的长度
InBlock.gif
    position0 = position1+pattern.Length;//--下次要查找的位置,-p1是上次赵到的位置+要搜索的字符串的长度-组合成下次搜索的长度
ExpandedSubBlockEnd.gif
    }

InBlock.gif
InBlock.gif    
//--如果没有找到就返回原来的数据
InBlock.gif
    if ( position0 == 0 ) return original;
InBlock.gif   
//--越看越向是补充后面的数据
InBlock.gif
    for (int i=position0 ; i < original.Length ; ++i ) chars[count++= original[i];
InBlock.gif    
return new string(chars, 0, count);
ExpandedBlockEnd.gif}

None.gif

转载于:https://www.cnblogs.com/ajaxren/archive/2007/04/29/732387.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值