我有一个字符串,需要将以下字符删除:'\r'、'\n'和'\t'。
我尝试了三种不同的方法来删除这些字符,并对它们进行了基准测试,以便找到最快的解决方案。
以下是我运行它们1000000次时的方法和执行时间:
如果我只需要删除1或2个字符,则应该是最快的解决方案。但是,当我添加更多字符时,它开始花费更多时间。
str = str.Replace("\r", string.Empty).Replace("\n", string.Empty).Replace("\t", string.Empty);
执行时间 = 1695
对于1个或2个字符,此方法比String.Replace更慢,但对于3个字符,它显示出更好的性能。
string[] split = str.Split(new char[] { '\t', '\r', '\n' }, StringSplitOptions.None);
str = split.Aggregate<string>((str1, str2) => str1 + str2);
执行时间 = 1030
即使只有1个字符,这是最慢的。可能我的正则表达式不是最优的。
str = Regex.Replace(str, "[\r\n\t]", string.Empty, RegexOptions.Compiled);
执行时间 = 3500
以下是我提出的三种解决方案。这里有没有任何更好、更快的解决方案,或者我可以在这段代码中进行哪些改进?
我用于基准测试的字符串:
StringBuilder builder = new StringBuilder();
builder.AppendFormat("{0}\r\n{1}\t\t\t\r\n{2}\t\r\n{3}\r\n{4}\t\t\r\n{5}\r\n{6}\r\n{7}\r\n{8}\r\n{9}",
"SELECT ",
"[Extent1].[CustomerID] AS [CustomerID], ",
"[Extent1].[NameStyle] AS [NameStyle], ",
"[Extent1].[Title] AS [Title], ",
"[Extent1].[FirstName] AS [FirstName], ",
"[Extent1].[MiddleName] AS [MiddleName], ",
"[Extent1].[LastName] AS [LastName], ",
"[Extent1].[Suffix] AS [Suffix], ",
"[Extent1].[CompanyName] AS [CompanyName], ",
"[Extent1].[SalesPerson] AS [SalesPerson], ");
string str = builder.ToString();