当前位置: 首页 > 编程语言 > C#

C#StringReplacewithDictionary分享

时间:2023-04-10 19:49:35 C#

C#StringReplacewithDictionary我有一个字符串,我需要做一些替换。我有一个字典,我在其中定义搜索替换对。我创建了以下扩展方法来执行此操作:publicstaticstringReplace(thisstringstr,Dictionarydict){StringBuildersb=newStringBuilder(str);返回sb.Replace(dict).ToString();}publicstaticStringBuildReplace(thisStringBuildersb,Dictionarydict){foreach(KeyValuePairreplacementindict){sb.Replace(replacement.Key,replacement.Value);}返回某人;}有没有更好的办法?如果数据被标记化(即“亲爱的$name$,截至$date$,您的余额为$amount$”),那么常规正则表达式可能会有用:staticreadonlyRegexre=newRegex(@"$(w+)$",RegexOptions.Compiled);staticvoidMain(){stringinput=@"亲爱的$name$,截至$date$,您的余额为$amount$";varargs=newDictionary(StringComparer.OrdinalIgnoreCase){{"name","MrSmith"},{"date","2009年8月5日"},{"amount","GBP200"}};字符串输出=re.Replace(输入,匹配=>args[match.Groups[1].Value]);但是,如果没有这样的事情,我希望您的Replace循环可以尽可能多地执行而不会达到极限。如果它没有被标记化,也许可以分析它;替换实际上是一个问题吗?使用Linq执行此操作:varnewstr=dict.Aggregate(str,(current,value)=>current.Replace(value.Key,value.Value));dict是定义搜索替换对的Dictionary对象。str是您需要对其进行一些替换的字符串。对我来说似乎是合理的,除了一件事:它对顺序敏感。例如,给定一个输入字符串“$x$y”和一个替换字典:“$x”=>“$y”“$y”=>“foo”替换的结果是“foofoo”或“$yfoo",取决于首先执行哪个替换。您可以使用List>来控制排序。另一种方法是迭代字符串,确保在进一步的替换操作中没有使用替换。但这可能要困难得多。这是@Marc的最佳答案的一个很好的重新思考版本,使函数可用作Regex的扩展方法:varargs=newDictionary(StringComparer.OrdinalIgnoreCase);args.Add("姓名","史密斯先生");args.Add("日期","2009年8月5日");args.Add("金额","200英镑");Regexre=newRegex(@"$(w+)$",RegexOptions.Compiled);字符串输出=re.replaceTokens(input,args);//识别LinqPad用户//output.Dump();}publicstaticclassReplaceTokensUsingDictionary{publicstaticstringreplaceTokens(thisRegexre,stringinput,IDictionaryargs){returnre.Replace(input,match=>args[match.Groups[1].Value]);当使用MarcGravell的RegEx解决方案时,首先使用ieContainsKey检查令牌是否可用,这可以防止KeyNotFoundException错误:stringoutput=re.Replace(zpl,match=>{returnargs.ContainsKey(match.Groups[1].值)?arg[match.Groups[1].Value]:match.Value;});使用以下稍微修改过的示例代码时(第一个参数具有不同的名称):varargs=newDictionary(StringComparer.OrdinalIgnoreCase){{"nameWRONG","MrSmith"},{"date","05Aug2009"},{"AMOUNT","GBP200"}};这将产生以下结果:“亲爱的$name$,截至2009年8月5日,您的余额为200英镑”这是给您的:以上是C#学习教程:用字典替换C#String。全部内容分享出来,如果对大家有用,需要了解更多C#学习教程,希望大家多多关注——publicstaticclassStringExm{publicstaticStringReplaceAll(thisStringstr,KeyValuePair[]map){如果(String.IsNullOrEmpty(str))返回str;StringBuilderresult=newStringBuilder(str.Length);StringBuilderword=newStringBuilder(str.Length);Int32[]indices=newInt32[map.Length];对于(Int32characterIndex=0;characterIndexword.Length&&old[word.Length-1]==c){indices[i]++;继续;}指数[i]=0;}Int32长度=0,索引=-1;布尔值存在=假;对于(inti=0;i0){存在=true;休息;}if(-indices[i]>length){length=-indices[i];索引=我;}}如果(存在)继续;if(index>=0){Stringvalue=map[index].Value;单词。删除(0,长度);结果。追加(价值);如果(单词。长度>0){characterIndex-=word.Length;word.Length=0;}}result.Append(word);word.Length=0;for(inti=0;i0)result.Append(word);返回结果.ToString();}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处: