什么算法.Net用于搜索字符串中的模式?

时间:2010-04-06 10:43:08

标签: c# .net algorithm

我正在研究字符串搜索算法,并想知道.NET String.Contains函数用于什么算法。 反射器显示使用了这个功能,但我不知道它的名字是什么意思。

private static extern int InternalFindNLSStringEx(IntPtr handle, string localeName, int flags, string source, int sourceCount, int startIndex, string target, int targetCount);

3 个答案:

答案 0 :(得分:8)

这只是通过文本和模式的嵌套循环实现的天真字符串搜索实现,具有O(n·m)运行时。

特别是,MSDN没有指定此方法的性能,因此假设性能更好是不安全的。

此外,大多数高级模式搜索方法对于某些字符串类型非常专业,而更好的通用搜索算法,在String.IndexOf中实现一个是某种不必要的优化。

原因很简单:如果您要求进行有效的模式搜索,那么无论如何您都会实施自己的,自定义以适合您的特定数据。所以没有必要在通用库中实现一些奇特的东西。


截至2016年(现在可以使用Core CLR源代码),实现仍在使用一个简单的嵌套循环。这是在NewApis::IndexOfStringNewApis::FastIndexOfString中实施的,这些内容来自托管InternalFindNLSStringExString.Contains函数(来自String.IndexOf)。

答案 1 :(得分:0)

为什么在source code可用时使用反射器?

答案 2 :(得分:0)

我找不到那个方法存根,但我最好的猜测是对于不区分大小写的搜索,它是局部特定的大小写折叠。