Occurrences of a List<string> in a string C#

c#, linq, string

Solution

That might also be fast:

private int stringMatches(string textToQuery, string[] stringsToFind)
{
  int count = 0;
  foreach (var stringToFind in stringsToFind)
  {
    int currentIndex = 0;

    while ((currentIndex = textToQuery.IndexOf(stringToFind , currentIndex, StringComparison.Ordinal)) != -1)
    {
     currentIndex++;
     count++;
    }
  }
  return count;
}

Problem

Given ``` var stringList = new List<string>(new string[] { "outage","restoration","efficiency"}); var queryText = "While walking through the park one day, I noticed an outage", "in the lightbulb at the plant. I talked to an officer about", "restoration protocol for public works, and he said to contact", "the department of public works, but not to expect much because", "they have low efficiency." ``` How do I get the overall number of occurances of all strings in stringList from queryText? In the above example, I would want a method that returned 3; ``` private int stringMatches (string textToQuery, string[] stringsToFind) { // } ``` RESULTS SPOKE TOO SOON! Ran a couple of performance tests, and this branch of code from Fabian was faster by a good margin: ``` private int stringMatches(string textToQuery, string[] stringsToFind) { int count = 0; foreach (var stringToFind in stringsToFind) { int currentIndex = 0; while ((currentIndex = textToQuery.IndexOf(stringToFind , currentIndex, StringComparison.Ordinal)) != -1) { currentIndex++; count++; } } return count; } ``` Execution Time: On a 10000 iteration loop using stopwatch: Fabian: 37-42 milliseconds lazyberezovsky StringCompare: 400-500 milliseconds lazyberezovsky Regex: 630-680 milliseconds Glenn: 750-800 milliseconds (Added StringComparison.Ordinal to Fabians answer for additional speed.)

Original source

Related problems