如何覆蓋字符串?例如:如何用另一個字符串覆蓋字符串?
string text = "abcdefghijklmnopqrstuvwxyz".OverwriteWith("hello world", 3);
// text == "abchello worldopqrstuvwxyz"
當然這種方法不存在。但是
- 在.NET Framework中是否有內置的東西?
- 如果不是,我怎樣纔能有效地寫入一個字符串到另一個字符串?
如何覆蓋字符串?例如:如何用另一個字符串覆蓋字符串?
string text = "abcdefghijklmnopqrstuvwxyz".OverwriteWith("hello world", 3);
// text == "abchello worldopqrstuvwxyz"
當然這種方法不存在。但是
您只需要使用String.Remove
和String.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
類。
該類表示一個類似字符串的對象,其值是可變的 字符序列。該值被認爲是可變的,因爲它可以通過追加,刪除, 替換或插入字符創建,即可修改 。
簡短的回答,你不能。字符串是不可變的類型。這意味着一旦它們被創建,它們就不能被修改。
如果你想操縱內存中的字符串,C++的方式,你應該使用一個StringBuilder。
你可以嘗試這種解決方案,這可能幫助你..
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!!
你需要的是一個擴展方法:
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);
確保您如果第一次測試字符串足夠長。如果3 + 11大於字符串的長度,則會根據MSDN獲得ArgumentOutOfRangeException:http://msdn.microsoft.com/en-us/library/d8d7z2kk.aspx –
@BenVanHees在OP情況下,這不是必要但添加它。謝謝。 –
感謝您竊取我的答案的一部分沒有信用@SonerGönül:P – Gusdor