从源字符串中查找多个索引

时间:2009-04-20 10:51:04

标签: c# .net algorithm string

基本上我需要做String.IndexOf(),我需要从源字符串中获取索引数组。

是否有简单的方法来获取索引数组?

在提出这个问题之前,我已经搜索了很多,但还没有找到解决这个简单问题的简单解决方案。

4 个答案:

答案 0 :(得分:16)

这种扩展方法怎么样:

public static IEnumerable<int> IndexesOf(this string haystack, string needle)
{
    int lastIndex = 0;
    while (true)
    {
        int index = haystack.IndexOf(needle, lastIndex);
        if (index == -1)
        {
            yield break;
        }
        yield return index;
        lastIndex = index + needle.Length;
    }
}

请注意,在“XAAAY”中查找“AA”时,此代码现在只会产生1。

如果您确实需要数组,请在结果上调用ToArray()。 (这假设是.NET 3.5,因此支持LINQ。)

答案 1 :(得分:6)

你必须循环,我怀疑:

        int start = 0;
        string s = "abcdeafghaji";
        int index;
        while ((index = s.IndexOf('a', start)) >= 0)
        {
            Console.WriteLine(index);
            start = index + 1;
        }

答案 2 :(得分:6)

    var indexs = "Prashant".MultipleIndex('a');

//Extension Method's Class
    public static class Extensions
    {
         static int i = 0;

         public static int[] MultipleIndex(this string StringValue, char chChar)
         {

           var indexs = from rgChar in StringValue
                        where rgChar == chChar && i != StringValue.IndexOf(rgChar, i + 1)
                        select new { Index = StringValue.IndexOf(rgChar, i + 1), Increament = (i = i + StringValue.IndexOf(rgChar)) };
            i = 0;
            return indexs.Select(p => p.Index).ToArray<int>();
          }
    }

答案 3 :(得分:2)

使用使用正则表达式的解决方案可能更可靠,使用indexOf函数可能不可靠。它将找到所有匹配和索引,而不是匹配可能导致意外结果的精确短语。此功能通过使用Regex库解决了这个问题。

#pic_1 {
  display: block;
  float: left;
  width: 33%;
}

#pic_2 {
  display: block;
  float: left;
  width: 33%;
}

#aboutus {
  text-align: center;
  display: block;
  float: left;
  width: 33%;
 }