我已经写了一个类来处理string,我有以下问题:传入的string可以在string的开始和结尾处带有空格。
我需要修剪string的空格,并将其转换为小写字母。 我的代码到目前为止:
var searchStr = wordToSearchReplacemntsFor.ToLower(); searchStr = searchStr.Trim();
我找不到任何function来帮助我在StringBuilder 。 问题是这个类应该尽可能快地处理大量的string。 所以我不想为每个类处理的string创build2个新的string。
如果这是不可能的,我会深入处理algorithm。
如何将新string添加到REG_MULTI_SZtypes的registry项?
如何根据托pipe代码在桌面和移动应用程序之间交换数据
使用多个对象遍历foreach循环
与Windows服务运行UI
你能全屏运行一个VB应用程序吗?
将消息发送到Windows GUI线程
如何使用WinAPI读取MessageBox文本
C# – 从现有stream程中读取文本
在C#中远程设置时区
调用“运行”命令
例如:
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()
除此之外,我认为你最好的算法是这样的:
迭代一次字符串,然后检查
是否有任何大写字母
是否有开始和结束的空白(并计算你正在谈论的字符数)
如果以上都不是,则返回原始字符串
如果大写,但没有空白:做ToLower并返回
如果空格:
分配一个正确大小的新字符串(原始长度 – 白色字符数)
在做ToLower时填写它
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。