传递列表并从字符串中找到它

时间:2015-08-30 08:32:23

标签: c#-4.0

我想传递字符串List并从另一个字符串中获取它的计数。

示例:字符串很简单,很复杂。

从这里我想要的是来自3的字符串的数量。我已经得到了这个的解决方案

    public static void Main()
    {
        string s1;
        Console.WriteLine("Enter the String : ");
        s1 = Console.ReadLine();
        Console.WriteLine(counting.StringMatch(s1, "is"));
        Console.ReadLine();
    }

    public static class counting
    {
        public static int StringMatch(string text, string pattern)
        {
            int count = 0;
            int i = 0;
            while ((i = text.IndexOf(pattern, i)) != -1)
            {
                i += pattern.Length;
                count++;
            }
            return count;
        }
    }`

现在因为我只传递了一个“is”的值,所以我如何传递多个“is”“和”我试图传递字符串列表的值。

 public static void Main()
    {
        string s1;
        Console.WriteLine("Enter the String : ");
        s1 = Console.ReadLine();

        List<string> lst = new List<string>();
        lst.Add("or");
        lst.Add("the");
        Console.WriteLine(counting.StringMatch(s1, lst));
        Console.ReadLine();
    }

    public static class counting
    {
        public static int StringMatch(string text,  List<string> pattern)
        {
            int count = 0;
            int i = 0;
            while ((i = text.IndexOf(pattern, i)) != -1)
            {
                i += pattern.Length;
                count++;
            }
            return count;
        }
    }

获取错误可能是错误的做法,我该如何处理这种情况。

1 个答案:

答案 0 :(得分:1)

String.IndexOf方法没有任何带有任何字符串集合的重载。您需要一个方法来查找列表中的每个字符串并返回第一个字符串:

public static class counting {

  private static int IndexOf(string text, List<string> pattern, int startIndex, out string match) {
    int firstIndex = -1;
    match = null;
    foreach (string s in pattern) {
      int index = text.IndexOf(s, startIndex);
      if (index != -1 && (firstIndex == -1 || index < firstIndex)) {
        firstIndex = index;
        match = s;
      }
    }
    return firstIndex;
  }

  public static int StringMatch(string text, List<string> pattern) {
    int count = 0;
    int i = 0;
    string match;
    while ((i = IndexOf(text, pattern, i, out match)) != -1) {
      i += match.Length;
      count++;
    }
    return count;
  }

}