Я пытаюсь заменить текст. Я использую словарь для задания.C# Замена строки в цикле Foreach
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);
}
Проблема
Если Звоню метод на aa строке, происходит следующее:
string mystring = "The jr. is less than the sr."
mystring.cleanString()
возвращается «Юниор»
Однако, когда я печатаю
Console.WriteLine(Regex.Replace(mystring, "jr.", "junior", Regex.IgnoreCase));
Я получаю результат: «Младший меньше ср.»
Почему цикл компрометирует задачу?
Вау, я плотный. Извините за упрямый вопрос, но спасибо за быстрый ответ. Мои глаза устали. – Bryant
Рад, что я мог бы помочь! Не волнуйтесь, это случается со всеми нами :) – Cyral