什么是最有效(读取时间)字符串搜索方法? (C#)
发布时间:2020-12-15 20:04:19 所属栏目:百科 来源:网络整理
导读:我发现我的程序正在搜索许多冗长的字符串(20,000),试图找到一个特定的独特短语. 在C#中执行此操作的最有效方法是什么? 下面是当前的代码,它的工作原理如下: 搜索从startPos开始,因为目标区域从一开始就有所消除 它循环遍历字符串,在每一步它检查该点的子字
我发现我的程序正在搜索许多冗长的字符串(20,000),试图找到一个特定的独特短语.
在C#中执行此操作的最有效方法是什么? 下面是当前的代码,它的工作原理如下: >搜索从startPos开始,因为目标区域从一开始就有所消除 我已经知道这是一个非常复杂且可能非常无效的算法. string result = string.Empty; for (int i = startPos; i <= response.Length - 1; i++) { if (response.Substring(i).StartsWith(startMatchString)) { string result = response.Substring(i).Substring(11); for (int j = 0; j <= result.Length - 1; j++) { if (result.Substring(j).StartsWith(endMatchString)) { return result.Remove(j) } } } } return result; 解决方法
您可以使用String.IndexOf,但请确保使用StringComparison.Ordinal,否则可能会慢一个数量级.
private string Search2(int startPos,string startMatchString,string endMatchString,string response) { int startMarch = response.IndexOf(startMatchString,startPos,StringComparison.Ordinal); if (startMarch != -1) { startMarch += startMatchString.Length; int endMatch = response.IndexOf(endMatchString,startMarch,StringComparison.Ordinal); if (endMatch != -1) { return response.Substring(startMarch,endMatch - startMarch); } } return string.Empty; } 在大约183 KB文件的40%处搜索1000次字符串大约需要270毫秒.没有StringComparison.Ordinal,它花了大约2000毫秒.使用您的方法搜索一次花费超过60秒,因为它在每次迭代时创建一个新字符串(O(n)),使您的方法为O(n ^ 2). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |