我已经写了一个类来处理string,我有以下问题:传入的string可以在string的开始和结尾处带有空格。
我需要修剪string的空格,并将其转换为小写字母。 我的代码到目前为止:
var searchStr = wordToSearchReplacemntsFor.ToLower(); searchStr = searchStr.Trim();
我找不到任何function来帮助我在StringBuilder
。 问题是这个类应该尽可能快地处理大量的string。 所以我不想为每个类处理的string创build2个新的string。
如果这是不可能的,我会深入处理algorithm。
尝试方法链接。
例如:
var s = " YoUr StRiNg".Trim().ToLower();
Cyberdrew有正确的想法。 由于字符串是不可变的,所以在这两个调用中你都将分配内存。 有一件事我想建议,如果你打算在你的代码中的许多地方调用string.Trim().ToLower()
,就是用扩展方法来简化你的调用。 例如:
public static class MyExtensions { public static string TrimAndLower(this String str) { return str.Trim().ToLower(); } }
这是我的尝试。 但在我检查之前,我会问两个非常重要的问题。
连续的“String.Trim”和“String.ToLower”调用真的影响我的应用程序的性能? 有人会注意到,如果这个算法是两倍速度或两倍的速度? 要知道的唯一方法是衡量我的代码的性能,并与预先设定的性能目标进行比较。 否则,微观优化将产生微观性能收益。
仅仅因为我写了一个更快的实现,并不意味着它是真的。 编译器和运行时可能会对我不了解的常见操作进行优化。 我应该将我的代码的运行时间与已经存在的代码进行比较。
static public string TrimAndLower(string str) { if (str == null) { return null; } int i = 0; int j = str.Length - 1; StringBuilder sb; while (i < str.Length) { if (Char.IsWhiteSpace(str[i])) // or say "if (str[i] == ' ')" if you only care about spaces { i++; } else { break; } } while (j > i) { if (Char.IsWhiteSpace(str[j])) // or say "if (str[j] == ' ')" if you only care about spaces { j--; } else { break; } } if (i > j) { return ""; } sb = new StringBuilder(j - i + 1); while (i <= j) { // I was originally check for IsUpper before calling ToLower, probably not needed sb.Append(Char.ToLower(str[i])); i++; } return sb.ToString(); }
如果字符串只使用ASCII字符,则可以查看C#ToLower优化 。 如果提前知道字符集,也可以尝试查找表
所以首先,先修剪并替换第二个,所以你必须迭代一个更小的字符串与你的ToLower()
除此之外,我认为你最好的算法是这样的: