一般进行替换操作都这样:
代码如下:
str=str.replace(字符串一,字符串二)
不难发现一个问题,如果str要循环替换很多次,下一次替换时会累加上上次替换的内容,并且全遍历一次,如果字符串二很多,替换的过程就像阶梯效果,越来越大,所以速度越来越慢。要解决这个问题只能找另外的方法替换这种表达方式。
如何以更高效率代替这种操作?思路如下:
知识星球
每次替换完后,在下次替换时先排除这次替换的内容,累加本次替换的内容。
代码如下:
publicRegexreturnMatch(Stringstr)//匹配正则
{
Regexr;
r=newRegex(@str,RegexOptions.IgnoreCase);
returnr;
}
///<summary>
///替换
///</summary>
///<paramname="sDetail">要处理的字符</param>
///<paramname="regex">正则表达式</param>
///<paramname="replace_str">要替换的内容</param>
///<returns>处理完的字符</returns>
publicstringreplace(stringsDetail,stringregex)
{
intlast_index=0;
stringcut_str=sDetail;
stringreturn_str="";
Regexr;
Matchm;
r=returnMatch(regex);
for(m=r.Match(sDetail);m.Success;m=m.NextMatch())
{
intn=m.Groups[0].Length;//匹配长度
cut_str=cut_str.Substring(last_index,cut_str.Length-last_index);//去掉上次后的结果
intk=cut_str.IndexOf(m.Groups[0].ToString());//当前位置
stringthis_v=cut_str.Substring(k,n);//当前匹配的值
stringstr3=cut_str.Substring(0,k+n);//当前得到的值
//return_str+=str3.Replace(m.Groups[0].ToString(),Return_Item_Content(m.Groups[0].ToString()));
return_str+=evn(str3,m);
last_index=k+n;//记录当前匹配的位置
}
if(return_str!="")
sDetail=return_str+cut_str.Substring(last_index,cut_str.Length-last_index);
returnsDetail;
}
}
|