配色: 字号:
C#自定义字符串替换Replace方法实例
2016-09-30 | 阅:  转:  |  分享 
  
C#自定义字符串替换Replace方法实例

本文实例讲述了C#自定义字符串替换Replace方法。分享给大家供大家参考。具体实现方法如下:

一、问题:

前一阵遇到一个如标题的算法题,是将原有字符串的某些片段替换成指定的新字符串片段,例如将源字符串:abcdeabcdfbcdefg中的cde替换成12345,得到结果字符串:ab12345abcdfb12345fg,即:abcdeabcdfbcdefg->ab12345abcdfb12345fg。

二、实现方法:

显然不能用string.Replace方法,需要自定义一个方法stringReplace(stringoriginalString,stringstrToBeReplaced,stringstrToReplace),下面是我的实现代码,在半个小时内完成,通过了调试和常规数据的测试验证,还算是及格吧。

复制代码代码如下:

publicstaticstringReplace(stringoriginalString,stringstrToBeReplaced,stringstrToReplace){stringresultString=null;char[]originalCharArray=originalString.ToCharArray();char[]strToBeCharArray=strToBeReplaced.ToCharArray();char[]strToCharArray=strToReplace.ToCharArray();ListnewCharList=newList();

for(inti=0;i
resultString=string.Join("www.hunanwang.net",newCharList);returnresultString;}

因为有时间限制的要求,我没有添加注释,不过代码量不算多,逻辑也算简单清晰,没有注释也OK啦,缺点是算法复杂度比较高。下面经过本人同意,转载一下同事HelloKitty同学对同一问题的实现代码,也换一种思路来解决同一个问题。代码稍多,也添加了一些附加功能,各种注释也很完备,当然也需要花费更多时间。欢迎大家有兴趣一同讨论此话题!PS:就在刚才还发现了下面代码的一个bug,就当是隐藏彩蛋了!

复制代码代码如下:

publicclassReplace{//////Replace方法//////原字符串///需要查找的字符串///替换的字符串///最终替换成功的字符串publicstringReplace(stringsource,stringfind,stringreplace){//要查找的字符串大于原来字符串,则不处理,返回原来字符if(find.Length>source.Length){returnsource;}

//记录找到多少次intfindCount=0;//仅用于标记,辅助记录多少次boolflag=true;//n:source字符串遍历的数值;j:find字符串遍历的数值intn=0,j=0;//s:查找到字符串的开始索引,e:查找到字符串的结束索引ints=0,e=0;

while(true){//判断字符是否相等if(source[n]==find[j]){//Source序列+1n++;//判断是否为第一位相匹配if(j==0){//赋值给s,查找到头的索引s=n;}//查找到后下一次比较find的下一位j++;//标记暂时找到前面相同的字符flag=true;}else{//记录不完全匹配flag=false;//find的索引归零j=0;//Source的索引继续想加n++;}

//已经查找完毕if(j==find.Length){//完全匹配if(flag){//查找的字符数量+1findCount++;}//记录查找的数组结尾索引e=n;//source索引继续+1n++;//find的索引归零j=0;//计算生成新字符串,之后继续循环,直到替换所有字符串source=GetNewString(source,find,replace,s,e);}//Source遍历完毕,则退出循环if(n>=source.Length){break;}}//最终字符串returnsource;}

//////获得新的字符串//////源字符串///需要查找的字符///需要替换的字符///查找到的字符开始索引///查找到的字符结束索引///返回替换后的字符串publicstringGetNewString(stringsource,stringfind,stringreplace,intstartIndex,intendIndex){//新字符串的长度intnewArrayLength=source.Length+endIndex-startIndex;//新字符数组char[]newStringArray=newchar[newArrayLength];//将前半部分复制给新字符串for(inti=0;i


献花(0)
+1
(本文系白狐一梦首藏)