代码之家  ›  专栏  ›  技术社区  ›  Hun1Ahpu

NET使用什么算法来搜索字符串中的模式?

  •  7
  • Hun1Ahpu  · 技术社区  · 14 年前

    我现在正在研究字符串搜索算法,想知道.NET字符串使用的是什么算法。例如,contains函数。 Reflector显示使用了这个函数,但我不知道它的名称是什么意思。

    private static extern int InternalFindNLSStringEx(IntPtr handle, string localeName, int flags, string source, int sourceCount, int startIndex, string target, int targetCount);
    
    3 回复  |  直到 8 年前
        1
  •  8
  •   Konrad Rudolph    8 年前

    它只是通过对文本和模式进行嵌套循环的NA_ve字符串搜索实现,运行时为O(N_m)。

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

    此外,大多数高级模式搜索方法都非常专门用于特定的字符串类型,而 更好的通用搜索算法,实现 String.IndexOf 有点不必要的优化。

    原因很简单:如果你 要求 一个高效的模式搜索,然后你将实现你自己的,定制的适合你的特定数据。所以没有必要在通用库中实现一些花哨的东西。


    截至2016年(核心CLR源代码现在可用),实现仍在使用NA_ve嵌套循环。这是在 NewApis::IndexOfString NewApis::FastIndexOfString ,即 InternalFindNLSStringEx )来自管理者 String.Contains 索引索引 功能。

        2
  •  0
  •   leppie    14 年前

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

        3
  •  0
  •   Muds    8 年前

    为什么使用反射镜时 source code 有空吗?