首页 > 解决方案 > 如何在字符串中找到模式?

问题描述

所以想象一下你有这样的字符串

o7o7o7o7o7o

我的方法有一个明确的模式o7o 是在第一个之后找到第二个o,这就是模式,然后看看它是否匹配。

字符串是,我如何获得第二个的索引o

我试过这个

var pattern = "o7o7o7o7o7o";
var index = input.IndexOf("*");

但这显然会得到o它找到的第一个索引,我想得到第二个。我怎么做?

标签: c#.netstringalgorithmpattern-matching

解决方案


您可以通过多种方式执行此操作,最快的方法是循环

string pattern = "o7o7o7o7o7o";
int count = 0;
int index = 0;
while(index < pattern.Length)
{
     if(pattern[index] == 'o') count++;
     if(count == 2) break;
     index++;
}

index这就是你想要的。

林克:

int index = pattern.Select((x, i) => new { x, i })
              .Where(a => a.x == 'o').Skip(1)
              .FirstOrDefault().i;

string.IndexOf():

int count = 0, index = 0;
do
{
    index = pattern.IndexOf('o', index);
    if (index != -1) { count++; index++; }
} while (index != -1 && count < 2);

还有很多其他的方法,但我认为上面的三个例子会很好,因为我想到的其他方法比较慢(至少我能想到的)。


推荐阅读