Having received the position of the input string, we get a substring at both ends

I have a search function that looks for keywords in a block of text and displays a truncated version of the results. My problem is that it won't show the search keyword if it's near the end.

For example.

Text = "A block of text is text that is grouped in some way, such as using paragraphs or block codes on a web page. Often times the text takes the form of a square or rectangular block."

I am looking for "times" with

 text = text.Substring(0, 100) + "...";

      

He will return

"A block of text is text that is grouped together in some way, such as with the use of paragraphs or..."

      

Is there a way to return 100 characters before and after the search keyword?

+3


source to share


3 answers


       string s = "A block of text is text that is grouped together in some way, such as with the use of paragraphs or";
       string wordtoSearch = "block";
       int firstfound = s.IndexOf(wordtoSearch);

        // If the index of the first letter found is greater than 100, get the 100 letters before the found word and 100 letters after the found word
        if (firstfound > 100)
        {
            string before = s.Substring(firstfound , firstfound-100);
            string after = s.Substring(firstfound + wordtoSearch.Length, 100);
            Console.WriteLine(before);
            Console.WriteLine(after);
        }
    //// If the index of the first letter found is less than 100, get the letters before the found word and 100 letters after the found word 
        if(firstfound < 100)
        {
            string before = s.Substring(0, firstfound);
            Console.WriteLine(before);
            if(s.Length >100)
            {
            string after = s.Substring(firstfound + wordtoSearch.Length, 100);
            Console.WriteLine(after);
            }
            else
            {
                string after = s.Substring(firstfound + wordtoSearch.Length);
                Console.WriteLine(after);
            }
        }

      



+1


source


You can do it,

    string s = "A block of text is text that is grouped together in some way, such as with the use of paragraphs or";
    string toBeSearched = "grouped";
    int firstfound = s.IndexOf(toBeSearched);       
    if (firstfound != -1 )
    {
        string before = s.Substring(0 , firstfound);
        string after = s.Substring(firstfound + toBeSearched.Length);         
    }

      



DEMO

+2


source


You can do something like this by making it somewhat more reusable and able to match multiple instances of the keyword

string input = "A block of text is text that is grouped together in some way, such as with the use of paragraphs or blockquotes on a Web page. Often times, the text takes on the shape of a square or rectangular block";
int buffer = 30; // how much do you want to show before/after
string match = "times";

int location = input.IndexOf(match);
while (location != -1) {
    // take buffer before and after:
    int start = location - Math.Min (buffer , location); // don't take before start
    int end = location + match.Length 
            + Math.Min( buffer,  input.Length - location - match.Length); // don't take after end
    Console.WriteLine("..." + input.Substring(start, end-start) + "...");
    location = input.IndexOf(match,location+1);
}

      

Providing output

...A block of text is text that is gro...
...with the use of paragraphs or blockquotes on a Web page. Often ...
...pe of a square or rectangular block...

      

0


source







All Articles