c#在字符串中替换字符串
本文关键字:字符串 替换 | 更新日期: 2023-09-27 18:04:36
是否可以在不分配返回值的情况下替换字符串中的子字符串?
有一个字符串:
string test = "Hello [REPLACE] world";
我想用其他东西替换子字符串[REPLACE]
:
test = test.replace("[REPLACE]", "test");
这工作得很好,但我怎么能做到这一点,而不分配返回值给一个变量?
我想要这样的东西:
test.replace("[REPLACE]", "test");
正如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
对象。因此,如果您不分配返回值(这是"更新"的字符串,实际上是应用更改的原始字符串的副本),您实际上已经放弃了您想要进行的更改。
如果您想进行就地更改,理论上可以直接使用 另一种选择(如下面的Skeet先生指出的)是使用char[]
(字符数组),但这是危险的,应该避免使用。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());