分析字符串替换的高效方法
这个是对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);
}
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);
}