[英]How can I know if String.Replace or StringBuilder.Replace will modify the string?
我想知道是否需要在字符串上執行String.Replace
/ StringBuilder.Replace
。
因此,我有兩種方法可以做到這一點。
第一種方式:
var myString = new StringBuilder("abcd");
var copyMyString = myString;
myString = myString.Replace("a", "b");
if (!myString.Equals(copyMyString))//If the string Is changed
{
//My Code
}
第二個:
var pos = myString.ToString().IndexOf("a");
if (pos > 0)
{
myString = myString.Replace("a", "b");
//After this line the string is replaced.
//My Code
}
什么是執行此操作(性能)的更快方法?
還有另一種方法嗎?
字符串長度有時可以是1MB或更多。
您可以通過修改第二種方法來加快速度,如下所示:
var pos = myString.ToString().IndexOf("a");
if (pos > 0)
{
myString = myString.Replace("a", "b", pos, myString.Length - pos);
//After this line the string is replaced.
//My Code
}
現在,我們調用StringBuilder.Replace()
的重載,該重載指定了起始索引 。
現在,無需再次搜索字符串的第一部分。 不過,這不太可能節省很多時間-但會節省一些時間。
這取決於pos > 0
(注意應該應該是pos >= 0
)為真的頻率。 .IndexOf()
將循環遍歷每個字符,直到找到您要查找的字符為止,所以它是O(n)
,這是一個非常便宜的操作,因為它僅是一次搜索。
這里的高成本是String.Replace()
。 對於經常在字符串下進行修改的字符串,可能會覆蓋該字符串,字符串越大,成本越高。 由於它可以找到所有出現的位置,因此也可以有多個替換。
因此,除非pos >= 0
幾乎始終為true
,否則第二種情況會更有效,但是您應該刪除.ToString()
因為它什么也不做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.