C#: Fundstelle eines Suchbegriffs markieren

Hebt den Suchbegriff an der Funstelle hervor, ähnlich den Suchmaschinen. Die Anzahl der Zeichen vor und nach der Fundstelle kann angegeben werden.

Beispiel: Suche nach "nur" im Text "Ich bin nur ein kleiner Text."

Ergebnis (4 Zeichen vor und nach der Funsstelle): ...bin nur ein...

// C#
public static string MarkReference(string text, string search, int num)
{
    string referenceText = text.Trim();
    string searchWord = search.Trim();
    string moreLeftTag = "...", moreRightTag = "...";
    int searchWordStartPos = 
           referenceText.IndexOf(searchWord, StringComparison.CurrentCultureIgnoreCase);
    if (searchWordStartPos >= 0)
    {
        int referenceTextLength = referenceText.Length;
        int searchWordLength = searchWord.Length;
        int resultLeftLength = num, resultRightLength = num;
        int resultLeftStartPos = searchWordStartPos - resultLeftLength;
        int resultRightStartPos = searchWordStartPos + searchWordLength;

        if (resultLeftStartPos < 0)
        {
            resultLeftLength = resultLeftLength + resultLeftStartPos;
            resultLeftStartPos = 0;
            moreLeftTag = "";
         }

         if ((resultRightStartPos + resultRightLength) > referenceTextLength)
         {
             resultRightLength = referenceTextLength - resultRightStartPos;
             moreRightTag = "";
         }

         return String.Format("{0}{1}{2}{3}{4}",
                moreLeftTag,
                referenceText.Substring(resultLeftStartPos, resultLeftLength),
                referenceText.Substring(searchWordStartPos, searchWordLength),
                referenceText.Substring(resultRightStartPos, resultRightLength),
                moreRightTag);
    }
    else
    {
        return null; // gibt's nicht...
    }
}

ASP.NET

August 2009 | Permalink | Feedback