[C#] Alle Positionen eines Suchtextes in einem Text finden

Drucken
( 0 Votes ) 
Hauptkategorie: Programmieren Kategorie: C#
Erstellt am 05.04.2012 Zuletzt aktualisiert am 05.04.2012 Geschrieben von Jonny132
Das string-Objekt stellt uns einige Hilfreiche Funktionen zur Stringmanipulation zur Verfügung. Darunter auch IndexOf welche uns die erste gefundene Position eines mitgegebenen Textes zurückgibt. Will man jedoch alle Positionen in der, der zu suchende Text vorkommt herausfinden muss man selber etwas Tüfteln.
Ich habe dazu eine kleine Hilfsfunktion erstellt die genau das macht. Als Parameter übernimmt Sie einen Text der zu suchen ist, und den Text der durchsucht werden soll. Als Rückgabe erhält man eine List die alle Positionen enthält.
    private List<int> FindPositionsOfText(string textToFind, string textToSearch)
    {
      List<int> result = new List<int>();

      int lastIndex = 0;
      while (textToSearch.IndexOf(textToFind, lastIndex ) > -1)
      {
        result.Add(textToSearch.IndexOf(textToFind, lastIndex));
        lastIndex = result[result.Count-1] + textToFind.Length;
      }
      return result;
    }
Wir benützen eine While - Schleife in der wir Abfragen ob IndexOf des gesuchten Textes größer als -1 ist, da diese Funktion im Fehlerfall bzw wenn der Text nicht gefunden wird eben diesen Text zurückgibt. Wird der Text gefunden fügen wir ihn dem Ergebnis hinzu welches wir am Ende der Funktion als Rückgabewert liefern. Danach setzen wir nurnoch die Hilfsvariable in der wir uns merken an welcher Position im zu suchenden Text wir uns gerade Befinden + die länge des zu Findenden Textes da wir ansonsten eine Endlosschleiffe verursachen indem immer der gleiche Text gefunden wird.

Beispiel:
Verwendet: 2 Textboxen und 1 Button 
    private void button1_Click(object sender, EventArgs e)
    {
      string ausgabe = "";
      foreach (int index in FindPositionsOfText(textBox1.Text, textBox2.Text))
      {
        if(ausgabe == string.Empty)
          ausgabe = "Text '" + textBox1.Text + "' gefunden an Position: " +
                     index.ToString();
        else
          ausgabe += ", " + index.ToString();
      }

      MessageBox.Show(ausgabe);
    }

    Veröffentlichen Sie ihre Kommentare ...