c#在字符串中替换字符串

本文关键字:字符串 替换 | 更新日期: 2023-09-27 18:04:36

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

有一个字符串:

string test = "Hello [REPLACE] world";

我想用其他东西替换子字符串[REPLACE]:

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

这工作得很好,但我怎么能做到这一点,而不分配返回值给一个变量?

我想要这样的东西:

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

c#在字符串中替换字符串

正如dlev所提到的,您不能在string中这样做,因为字符串在。net中是不可变的 -一旦构造了字符串,您就无法做任何事情(不包括不安全的代码或反射)来更改内容。这使得字符串通常更容易使用,因为你不需要担心防御性复制,它们自然是线程安全的等等。

然而,它的可变表兄弟是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"

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

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

另一种选择(如下面的Skeet先生指出的)是使用StringBuilder及其Replace()方法。也就是说,像您所展示的这样的简单替换非常快,所以您可能不想使用StringBuilder,除非您经常这样做。

. net中的字符串是不可变的。

最接近内联编辑的方法是从字符串创建StringBuilder。In-line修改它的内容,然后让它再次吐出一个字符串。

但是这仍然会产生一个新的字符串,而不是改变原来的字符串。这是一种有用的技术,可以避免在进行大量字符串篡改时生成大量中间字符串,例如在循环中。

你不能。你必须赋值,因为字符串是不可变的。

内置引用类型(c#引用)

你不能。字符串在。net中是不可变的

不能,因为c#中的字符串是不可变的。像这样的东西会违反这一点。

您需要具有字符串的返回类型,因为您正在使用的字符串不能更改。

下面是从HTML内容中获取字符串并将其传递给StringBuilder并设置变量值的代码。你不能做string。replace。在操作时必须使用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());