Мне нужно выполнить замену нескольких строк. У меня есть строка, в которой необходимо изменить несколько частей в соответствии с картой замещения.Быстрая замена нескольких строк
Все замены должны быть сделаны в одном действии - это означает, что если «a
» следует заменить «b
», а также «b
» должен быть заменен на «c
» и входная строка «abc
», то результат будет "bcc
" У меня есть решение, основанное на регулярном выражении, а затем заменяя все совпадения. Я написал это некоторое время назад, теперь я рефакторинг кода и не очень доволен этим. Лучше ли (быстрее, проще) растворение?
Это то, что у меня есть:
public static string Replace(string s, Dictionary<string, string> substitutions)
{
string pattern = "";
int i = 0;
foreach (string ch in substitutions.Keys)
{
if (i == 0)
pattern += "(" + Regex.Escape(ch) + ")";
else
pattern += "|(" + Regex.Escape(ch) + ")";
i++;
}
var r = new Regex(pattern);
var parts = r.Split(s);
string ret = "";
foreach (string part in parts)
{
if (part.Length == 1 && substitutions.ContainsKey(part[0].ToString()))
{
ret += substitutions[part[0].ToString()];
}
else
{
ret += part;
}
}
return ret;
}
И тестовый случай:
var test = "test aabbcc";
var output = Replace(test, new Dictionary<string, string>{{"a","b"},{"b","y"}});
Assert.That(output=="test bbyycc");
Никогда не используйте «+» на строках, если не нужно добавить несколько строк (менее 4 строк) ... вместо этого используйте StringBuilder! – Olivier