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

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

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

        }

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

    
return -1;
}

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


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

posted @ 2007-04-29 15:49  苹果王子  阅读(1378)  评论(0编辑  收藏  举报