我试图替换文字。我正在使用字典来完成任务。
public static string cleanString(this String str) {
Dictionary<string, string> dict = new Dictionary<string,string>();
dict.Add("JR", "Junior");
dict.Add("SR", "Senior");
foreach (KeyValuePair<string,string> d in dict) {
if (str.BlindContains(p.Key)) {
str = str.BlindReplace(str, p.Value);
}
}
return str;
}
BlindContains和BlindReplace只是忽略替换的情况(并且BC确保字符串不是另一个单词的一部分):
public static bool BlindContains(this String str, string toCheck)
{
if (Regex.IsMatch(str, @"\b" + toCheck + @"\b", RegexOptions.IgnoreCase))
return str.IndexOf(toCheck, StringComparison.OrdinalIgnoreCase) >= 0;
return false;
}
public static string BlindReplace(this String str, string oldStr, string newStr)
{
return Regex.Replace(str, oldStr, newStr, RegexOptions.IgnoreCase);
}
问题
如果我在字符串上调用我的方法,则会发生以下情况:
string mystring = "The jr. is less than the sr."
mystring.cleanString()
返回&#34; Junior&#34;
然而,当我打印
Console.WriteLine(Regex.Replace(mystring, "jr.", "junior", Regex.IgnoreCase));
我得到输出:&#34;大三小于sr。&#34;
为什么循环会破坏任务?
答案 0 :(得分:5)
您应该在字典中传递密钥(其中包含要搜索的文本),而不是您要搜索的实际字符串。
应该是:
str = str.BlindReplace(p.Key, p.Value);
相反:
str = str.BlindReplace(str, p.Value);
您目前正在使用值“Junior”替换字符串,因为您将 字符串指定为要搜索的文本。 (这将使它替换整个字符串而不仅仅是关键字)
答案 1 :(得分:0)
在cleanString实现中,我认为你在调用BlindReplace时出错了。而不是:
str = str.BlindReplace(str,p.Value);
我相信你应该打电话:
str = str.BlindReplace(d.Key,d.Value);