2013-08-20 116 views
-3

如何覆蓋字符串?例如:如何用另一個字符串覆蓋字符串?

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

當然這種方法不存在。但是

  • 在.NET Framework中是否有內置的東西?
  • 如果不是,我怎樣纔能有效地寫入一個字符串到另一個字符串?

回答

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

確保您如果第一次測試字符串足夠長。如果3 + 11大於字符串的長度,則會根據MSDN獲得ArgumentOutOfRangeException:http://msdn.microsoft.com/en-us/library/d8d7z2kk.aspx –

+1

@BenVanHees在OP情況下,這不是必要但添加它。謝謝。 –

+0

感謝您竊取我的答案的一部分沒有信用@SonerGönül:P – Gusdor

5

簡短的回答,你不能。字符串是不可變的類型。這意味着一旦它們被創建,它們就不能被修改。

如果你想操縱內存中的字符串,C++的方式,你應該使用一個StringBuilder。

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!!

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);