如何用另一个字符串覆盖一个字符串?

时间:2013-08-20 07:11:10

标签: c# string overwrite

如何覆盖字符串?例如:

string text = "abcdefghijklmnopqrstuvwxyz".OverwriteWith("hello world", 3);
// text == "abchello worldopqrstuvwxyz"

当然这种方法不存在。但

  • .NET Framework中是否有内置的东西?
  • 如果没有,我怎样才能有效地将字符串写入另一个字符串?

4 个答案:

答案 0 :(得分:5)

您只需使用String.RemoveString.Insert方法,如

string text = "abcdefghijklmnopqrstuvwxyz";
if(text.Length > "hello world".Length + 3)
{
   text = text.Remove(3, "hello world".Length).Insert(3, "hello world");
   Console.WriteLine(text);
}

输出将是;

abchello worldopqrstuvwxyz

这是DEMO

请记住,.NET中的字符串是immutable types。您无法更改它们。即使您认为自己更改了它们,实际上也会创建一个新的字符串对象。

如果您想使用可变字符串,请查看StringBuilder类。

  

此类表示类似于字符串的对象,其值是可变的   字符序列。据说这个值是可变的,因为它可以   通过追加,删除,创建后进行修改   替换或插入字符。

答案 1 :(得分:5)

简短的回答,你不能。字符串是不可变类型。这意味着一旦创建它们,就无法修改它们。

如果你想以c ++的方式操作内存中的字符串,你应该使用StringBuilder。

答案 2 :(得分:1)

您可以尝试此解决方案,这可能会对您有所帮助..

  var theString = "ABCDEFGHIJ";
  var aStringBuilder = new StringBuilder(theString);
  aStringBuilder.Remove(3, 2);  //Used to Remove the 
  aStringBuilder.Replace();  //Write the Required Function in the Replace
  theString = aStringBuilder.ToString();

参考:Click Here!!

答案 3 :(得分:1)

你想要的是一种扩展方法:

static class StringEx
{
    public static string OverwriteWith(this string str, string value, int index)
    {
        if (index + value.Length < str.Length)
        {
            // Replace substring
            return str.Remove(index) + value + str.Substring(index + value.Length);
        }
        else if (str.Length == index)
        {
            // Append
            return str + value;
        }
        else
        {
            // Remove ending part + append
            return str.Remove(index) + value;
        }
    }
}

// abchello worldopqrstuvwxyz
string text = "abcdefghijklmnopqrstuvwxyz".OverwriteWith("hello world", 3);
// abchello world
string text2 = "abcd".OverwriteWith("hello world", 3);
// abchello world
string text3 = "abc".OverwriteWith("hello world", 3);
// hello world
string text4 = "abc".OverwriteWith("hello world", 0);