Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 在大字符串中搜索小字符串_Vb.net_String - Fatal编程技术网

Vb.net 在大字符串中搜索小字符串

Vb.net 在大字符串中搜索小字符串,vb.net,string,Vb.net,String,我正在做一个项目,我必须在一个非常非常大的字符串中搜索一个小字符串(大约40个字符)(我们说的是大约一亿个字符)。我正在寻找最快的方法。我尝试了几种方法:以下是基准测试的结果: 包含248毫秒内返回的真 IndexOf在671毫秒内返回True(我决不会这么说!) 仅在48 ms中包含使用数组而不是返回的字符串的True 尽管数组中的包含似乎是最好的方法,但我也研究了一些搜索算法(,和),但它们似乎都不适合我的场景 我的问题是:有没有一种更快的方法在一个非常大的字符串中搜索一个小字符串 谢谢

我正在做一个项目,我必须在一个非常非常大的字符串中搜索一个小字符串(大约40个字符)(我们说的是大约一亿个字符)。我正在寻找最快的方法。我尝试了几种方法:以下是基准测试的结果:

  • 包含248毫秒内返回的
    
    
  • IndexOf
    671毫秒内返回
    True
    (我决不会这么说!)
  • 仅在48 ms中包含使用数组而不是返回的字符串的
    True
尽管数组中的
包含
似乎是最好的方法,但我也研究了一些搜索算法(,和),但它们似乎都不适合我的场景

我的问题是:有没有一种更快的方法在一个非常大的字符串中搜索一个小字符串

谢谢


PWhite

如果您有一个固定的、巨大的字符串,您希望重复搜索非常小的子字符串,那么您可能希望搜索实现or的库。一旦完成了构建后缀树或数组的预处理工作,搜索长度为P的模式的运行时是后缀树的O(P)和后缀树的O(P+logt),其中T是长文本字符串的长度。这可能比您现在看到的要快得多,不过您需要更重的库来实现这一点


另一方面,如果有一组固定的模式字符串和一组旋转的大字符串要搜索,则可能需要使用,它可以在时间O(T+z)内扫描长度为T的字符串中固定模式集的所有出现,其中z是匹配数。这在实践中通常是非常快的。

这就引出了一个问题,您首先是如何获得非常大的字符串的?…如何使用数组显示“Contains”大小写的?您的结果似乎有些奇怪。您是在多线程中运行的吗?@莲花
包含
调用
IndexOf
StringComparison.Ordinal
比较类型,这可能就是它更快的原因。尝试优化这一点表明您将不止一次地这样做。你会在同一个巨大的字符串中搜索多个单词吗?关于这个巨大的字符串是什么,它是如何创建的,或者你为什么要搜索它,还有什么可以帮助你找到一种搜索方法,而不仅仅是暴力?