我有以下方法,我需要检查一些可能在任何情况下的某些字符串,然后删除它们。只是想知道是否有更好的表现方式?
private void MyMethod(string Filter)
{
//need to remove <Filter> and </Filter> case in-sensitive
var result = Filter.ToLower().Replace("<filter>","");
result = Filter.ToLower().Replace("</filter>,"");
...........................
}
答案 0 :(得分:4)
检查此答案:Is there an alternative to string.Replace that is case-insensitive?
您可能希望与性能检查进行比较。使用分析器对此进行配置。这是真正了解什么,更快的唯一方法。
但老实说:性能真的重要吗?你经常这样做吗?我不能真的看到你经常这样做,表演将成为一个问题......
您可以尝试使用不区分大小写的替换Regex.Replace
。这不是更快。但它不区分大小写。
答案 1 :(得分:3)
这种方法的一个问题是它会将整个字符串变成小写字母,而不仅仅是一个用于替换的情况。
您可以使用正则表达式进行大小写匹配:
string result = Regex.Replace(
Filter,
"</?filter>",
String.Empty,
RegexOptions.IgnoreCase
);
另一个替代方法是使用IndexOf
方法来定位字符串,因为它可以进行单例搜索:
string result = Filter;
int index;
while ((index = IndexOf("<filter>", StringComparison.OrdinalIgnoreCase)) != -1) {
result = result.Remove(index, 8);
}
while ((index = IndexOf("</filter>", StringComparison.OrdinalIgnoreCase)) != -1) {
result = result.Remove(index, 9);
}
答案 2 :(得分:1)
Replace
调用在C ++中实现的非托管代码,我认为这将很难被击败。
但是,我可以看到你继续使用.ToLower()
,你可以减少一个电话并保留字符串。
答案 3 :(得分:1)
在任何情况下,你都在这里对原始字符串进行下限,这可能不是一件好事吗?
答案 4 :(得分:1)
这取决于一些事情,滤波器串等多长时间 所以你必须衡量。
但是我希望这里的(单个!)RegEx更快。
答案 5 :(得分:0)
如果提供的代码适合您,则会更快:
private void MyMethod(string Filter)
{
//need to remove <Filter> and </Filter> case in-sensitive
var result = Filter.ToLower().Replace("</filter>","");
...........................
}
因为第一个语句的结果被忽略了。