如何同时对字符串进行多次替换?

时间:2012-09-12 19:30:33

标签: c# asp.net replace

string rawConnString = Properties.Settings.Default.ConnectionString;

我想用“rawConnString”执行此操作:

rawConnString.Replace("<<DATA_SOURCE>>", server);
rawConnString.Replace("<<INITIAL_CATALOG>>", "tempdb");

然后将最终字符串设置为变量finalConnString。

我将如何做到这一点?

这是ASP .NET 4.0 / C#btw。

6 个答案:

答案 0 :(得分:2)

string finalString = Properties.Settings.Default.ConnectionString.Replace("<<DATA_SOURCE>>", server).Replace("<<INITIAL_CATALOG>>", "tempdb"); 

将在一行代码中完成所有操作。但是IMO更加丑陋,因为你必须滚动。您问题中的代码似乎是 LOT 更干净,对我来说更具可读性。

在一行代码中执行此操作根本无法帮助您提高性能。无论哪种方式都应该编译为相同的MSIL。我会像你一样离开它。

答案 1 :(得分:1)

不确定这是否是您所追求的,但您可以链接它们:

var finalConnString = rawConnString.Replace("<<DATA_SOURCE>>", server)
    .Replace("<<INITIAL_CATALOG>>", "tempdb");

如果您希望通过单个方法调用来执行此操作,我认为.NET没有任何原生代码。您始终可以创建扩展方法。这是一个performance-conscious ReplaceMany implementation(签名.ReplaceMany(string[] oldValues, string[] newValues))。

答案 2 :(得分:1)

你的意思是这样的

string tempString=rawConnString.Replace("<<DATA_SOURCE>>", server);
sting finalstring=tempString.Replace("<<INITIAL_CATALOG>>", "tempdb");

答案 3 :(得分:1)

坦率地说这是微不足道的;你有90%的代码需要:

string rawConnString = Properties.Settings.Default.ConnectionString;

string finalConnString = rawConnString
                            .Replace("<<DATA_SOURCE>>", server)
                            .Replace("<<INITIAL_CATALOG>>", "tempdb");

答案 4 :(得分:1)

为避免使用Replace的两个背靠背调用,您可以使用正则表达式。但是,这比原来的可读性差得多:

string connString = Regex.Replace(
    rawConnString
,   "(<<DATA_SOURCE>>)|(<<INITIAL_CATALOG>>)"
,   m => m.Groups[1].Success ? server : "tempdb"
);

Link to ideone.

答案 5 :(得分:0)

首先,String.replace不会更改原始字符串:它会创建一个新字符串。所以你必须将返回值分配给某个东西。所以逻辑上最简单的事情是:

finalstring=rawConnString.Replace("<<DATA_SOURCE>>", server);  
finalstring=finalstring.Replace("<<INITIAL_CATALOG>>", "tempdb");

请注意,对于第二次替换,您希望从第一次替换的结果开始,而不是原始字符串。

由于String.replace返回一个字符串,而String.replace接受一个字符串,您可能会发现它们更容易一起运行:

finalstring=rawConnString.Replace("<<DATA_SOURCE>>", server).Replace("<<INITIAL_CATALOG>>", "tempdb");