我的代码使用String.Replace
几次连续:
mystring = mystring.Replace("somestring", variable1);
mystring = mystring.Replace("somestring2", variable2);
mystring = mystring.Replace("somestring3", variable1);
我怀疑有一个更好更快的方式来做到这一点。 您有什么建议?
Answer 1:
对于一个“简单的”替代只使用StringBuilder ....
StringBuilder sb = new StringBuilder("11223344");
string myString =
sb
.Replace("1", string.Empty)
.Replace("2", string.Empty)
.Replace("3", string.Empty)
.ToString();
Answer 2:
我们要想方设法使这个很难理解到底是怎么回事?
如果是这样的正则表达式是你的朋友
var replacements = new Dictionary<string,string>()
{
{"somestring",someVariable1},
{"anotherstring",someVariable2}
};
var regex = new Regex(String.Join("|",replacements.Keys.Select(k => Regex.Escape(k))));
var replaced = regex.Replace(input,m => replacements[m.Value]);
直播: http://rextester.com/SXXB8348
Answer 3:
你至少链中的语句:
mystring = mystring.Replace("somestring", variable1)
.Replace("somestring2", variable2)
.Replace("somestring3", variable3);
Answer 4:
呼叫Replace
三次,不仅是一个有效的答案,这可能是首选之一:
正则表达式有三个步骤: 分析,执行,制定 。 但String.Replace
是硬编码,因此在很多情况下,它具有超强的速度。 而一个复杂的正则表达式是不是一个格式良好的链可读Replace
语句。 (比较乔纳森的解决方案, 丹尼尔的)
如果你还是不相信Replace
为你的情况更好,使竞争出来呢! 尝试两种方法并排侧,使用Stopwatch
,看看你有多少毫秒使用保存数据时。
但是, 不要优化代码,除非你需要! 任何开发人员喜欢的可读性和可维护性上执行3毫秒更快的意大利面条的神秘一堆。
Answer 5:
这篇文章正则表达式:在单次使用C#替换多个字符串会有所帮助:
static string MultipleReplace(string text, Dictionary replacements) {
return Regex.Replace(text,
"(" + String.Join("|", adict.Keys.ToArray()) + ")",
delegate(Match m) { return replacements[m.Value]; }
);
}
// somewhere else in code
string temp = "Jonathan Smith is a developer";
adict.Add("Jonathan", "David");
adict.Add("Smith", "Seruyange");
string rep = MultipleReplace(temp, adict);
Answer 6:
根据您的数据是如何组织的(你要替换的)或你有多少; 数组和循环可能是一个不错的办法。
string[] replaceThese = {"1", "2", "3"};
string data = "replace1allthe2numbers3";
foreach (string curr in replaceThese)
{
data = data.Replace(curr, string.Empty);
}
Answer 7:
如果你不希望使用正则表达式这个类添加到项目中,
它使用的扩展方法“MultipleReplace”:
public static class StringExtender
{
public static string MultipleReplace(this string text, Dictionary<string, string> replacements)
{
string retVal = text;
foreach (string textToReplace in replacements.Keys)
{
retVal = retVal.Replace(textToReplace, replacements[textToReplace]);
}
return retVal;
}
}
然后你可以使用这段代码:
string mystring = "foobar";
Dictionary<string, string> stringsToReplace = new Dictionary<string,string>();
stringsToReplace.Add("somestring", variable1);
stringsToReplace.Add("somestring2", variable2);
stringsToReplace.Add("somestring3", variable1);
mystring = mystring.MultipleReplace(stringsToReplace);
Answer 8:
我的优选的方法是使用的功率Regex
来解决多个替换问题。 这种方法唯一的问题是你只有选择一个string
来取代。
下面将替换所有'/'
或':'
有'-'
,使有效的文件名。
Regex.Replace("invalid:file/name.txt", @"[/:]", "-");
文章来源: Alternative to multiple String.Replaces [duplicate]