C#替换字符串中的字符串

时间:2011-08-04 16:41:36

标签: c# string replace

是否可以在不指定返回值的情况下替换字符串中的子字符串?

我有一个字符串:

string test = "Hello [REPLACE] world";

我希望用其他东西替换子串[REPLACE]

test = test.replace("[REPLACE]", "test");

这样可以正常工作,但是如果不将返回值赋给变量怎么办?我想要这样的东西:

test.replace("[REPLACE]", "test");

7 个答案:

答案 0 :(得分:27)

你不能,因为 string是不可变的。它的设计使得对字符串的任何“更改”实际上都会导致创建新的string对象。因此,如果您没有分配返回值(这是“更新的”字符串,实际上是应用了更改的原始字符串的副本),您实际上已经放弃了您想要进行的更改。

如果您想进行就地更改,理论上您可以直接使用char[](字符数组),但很危险,应该避免。 < / p>

另一个选择(如下面的Skeet先生所指出的)是使用StringBuilder及其Replace()方法。话虽这么说,像你所展示的那样简单的替换很快,所以你可能不想打扰StringBuilder,除非你经常这样做。

答案 1 :(得分:25)

正如dlev所提到的,你不能用string执行此操作,因为.NET中的字符串是 immutable - 一旦构造了一个字符串,你就无能为力(不包括不安全)代码或反射)来改变内容。这使得字符串通常更容易可以使用,因为您不需要担心防御性复制,它们自然是线程安全等。

然而,它的可变表亲是StringBuilder - 它有一个Replace方法来执行对象替换。例如:

string x = "Hello [first] [second] world";

StringBuilder builder = new StringBuilder(x);
builder.Replace("[first]", "1st");
builder.Replace("[second]", "2nd");

string y = builder.ToString(); // Value of y is "Hello 1st 2nd world"

答案 2 :(得分:2)

你做不到。您必须将值赋值为字符串是不可变的

http://msdn.microsoft.com/en-us/library/362314fe.aspx

答案 3 :(得分:2)

.NET中的字符串是不可变的,它们不能在线编辑。

离线编辑最接近的是从字符串创建StringBuilder,内嵌其内容,然后让它再次吐出一个字符串。但这仍然会产生一个新的字符串,而不是改变原始字符串。但是,这是一种有用的技术,可以避免在进行大量字符串摆弄时产生大量中间字符串,例如:在循环中。

答案 4 :(得分:1)

你不能,字符串在.NET中是不可变的

答案 5 :(得分:1)

你不能,在C#字符串中是不可变的。这样的事情会违反这一点。您需要具有返回类型的字符串,因为您正在使用的字符串不能更改。

答案 6 :(得分:0)

以下是从html获取字符串并传递StringBuilder并从变量中设置值的代码。你不能做string.replace.You必须在操作时使用StringBuilder。在html页面中我添加了[Name]被替换来自代码后面的名称。确保[名称]是唯一的,或者你可以给出任何唯一的名称。

 string Name = txtname.Text;
 string contents = File.ReadAllText(Server.MapPath("~/Admin/invoice.html"));

                StringBuilder builder = new StringBuilder(contents);

                builder.Replace("[Name]", Name);

                StringReader sr = new StringReader(builder.ToString());