C# 如何知道String.Replace或StringBuilder.Replace是否会修改字符串?
我想知道是否需要对字符串执行String.Replace/StringBuilder.Replace 所以我有两种方法 第一种方式:C# 如何知道String.Replace或StringBuilder.Replace是否会修改字符串?,c#,string,C#,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
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或更大。这取决于pos>0的频率。注意,pos>=0可能是真的。将循环遍历每个字符,直到找到您要查找的内容,所以它处于启用状态。这是一个非常便宜的操作,因为它只是一次搜索
这里的成本很高。对于经常在下面修改它们的字符串,可以覆盖字符串,字符串越大,成本就越高。这也可以有多个替换,因为它会查找所有出现的情况
因此,除非pos>=0几乎总是正确的,否则第二种情况将更有效,但您应该放弃.ToString,因为它不起任何作用。您可以通过如下修改第二种方法来加快速度:
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
}
我们现在打电话
现在,它不需要再次搜索字符串的第一部分。这不太可能节省很多时间,但会节省一些时间。第一个可能需要一些时间,因为您的程序将遍历字符串以修改字母,然后遍历两个字符串以比较它们。第二种方法速度更快,但问题是它不起作用。如果您的初始字符串包含某个字符,并且在执行代码之前未验证重放是否有效,请执行代码。显然,第二个字符串更短、更干净。您正在比较苹果和桔子。第一个变量永远不会为false,因为两个变量引用相同的变量StringBuilder@E-Bat更短、更干净的代码并不总是意味着更快或更好的性能。