替代多个String.Replaces [重复](Alternative to multiple S

2019-06-27 03:49发布

这个问题已经在这里有一个答案:

  • 在C#替换多个字符串元素 8回答

我的代码使用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]