【问题标题】:How can I substitute characters in C#如何在 C# 中替换字符
【发布时间】:2011-06-16 08:57:14
【问题描述】:

我有这样的字符串:

var abc = "text1 text2 text3";

我想将字符串中的“text3”更改为“textabc”。有没有办法在不创建新字符串的情况下做到这一点?

【问题讨论】:

  • 你为什么要这么做??
  • @Akram - 我不认为这是一个特别模糊的要求?你为什么这么认为?
  • @El Ronnoco:我想知道 OP 真正需要什么..
  • 看看this thread
  • 你所说的“创建一个新字符串”是什么意思,为什么你认为你需要避免它?

标签: c#


【解决方案1】:

字符串在 C# 中是不可变的,因此任何操作都会固有地创建一个新字符串...

From MSDN

字符串是不可变的——其内容 无法更改字符串对象 在创建对象之后,虽然 语法使它看起来好像你 可以做到这一点。

StringBuilders 由于这个事实,通常是对“字符串”执行操作的最有效方式。例如,特别是如果您一次连接一个字符。

请参阅StringBuilder.Replace() 方法 - 这不需要您将结果重新分配给另一个 StringBuilder,因为它实际上会更改 StringBuilder 本身

看看著名的Jon Skeetthis article(你会认出他的:))所有关于明智地使用 StringBuilder 的知识。

【讨论】:

  • @Homam 谢谢 :) 我认为 OP 只是在询问如何将结果重新分配回原始变量名... d'Oh
  • 是的,就是这样,从问题的层面来看,我知道 OP 想要什么。感谢文章的链接及其作者:P。
【解决方案2】:

不,因为字符串是不可变的,但您可以将新字符串重新分配给同一个变量

var abc = "text1 text2 text3"
abc = abc.Replace("text3", "textabc");

【讨论】:

  • 我相信这仍然为两个字符串(即abc pre-op 和abc post-op)分配内存,根据我的回答中 Skeety 的文章中的示例
【解决方案3】:
string newString = abc.Replace("text3", "textabc");

字符串在 CLR 中是不可变的:您永远无法更改它们。

【讨论】:

    【解决方案4】:

    主要问题是你写“不创建新字符串”是什么意思。

    如上所述,字符串在 .NET 中是不可变的,也就是说,一旦创建,就无法更改。

    但是,您可以将它们替换为新的字符串实例:

    var abc = "text1 text2 text3";  
    abc = abc.Replace("text3", "textabc");
    

    如果你想要更多的灵活性,你可能想要使用StringBuilder,你可以在其中尽可能多地删除和替换字符串,最后使用它的ToString方法将结果作为字符串实例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-23
      • 2015-05-21
      • 1970-01-01
      • 2011-09-16
      相关资源
      最近更新 更多