2.5. Finding the Location of All Occurrencesof a String Within Another String
Problem
You need to search a string for every occurrence of a specific string. In addition, the case-sensitivity, or insensitivity, of the search needs to be controlled.
Solution
Using IndexOf
or
IndexOfAny
in a loop, we can determine how many
occurrences of a character or string exist as well as their locations
within the string. To find each occurrence of a case-sensitive string
in another string, use the following code:
using System; using System.Collections; public static int[] FindAll(string matchStr, string searchedStr, int startPos) { int foundPos = -1; // -1 represents not found int count = 0; ArrayList foundItems = new ArrayList( ); do { foundPos = searchedStr.IndexOf(matchStr, startPos); if (foundPos > -1) { startPos = foundPos + 1; count++; foundItems.Add(foundPos); Console.WriteLine("Found item at position: " + foundPos.ToString( )); } }while (foundPos > -1 && startPos < searchedStr.Length); return ((int[])foundItems.ToArray(typeof(int))); }
If the FindAll
method is called with the following
parameters:
int[] allOccurrences = FindAll("Red", "BlueTealRedredGreenRedYellow", 0);
the string "Red
" is found at locations 8 and 19 in
the string searchedStr
. This code uses the
IndexOf
method inside a loop to iterate through
each found matchStr
string in the
searchStr
string.
To find a case-sensitive character in a string, use the following code:
public static int[] FindAll(char MatchChar, string searchedStr, ...
Get C# Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.