2017-07-19 16 views
3

テキストのブロック内のキーワードを検索し、切り詰めた結果を表示する検索機能があります。私の問題は、検索されたキーワードが近くに表示されないということです。入力文字列の位置を取得して両端に文字列を取得

たとえば、

Text = "テキストのブロックは、Webページ上の段落やブロッククォートを使用するなど、何らかの方法でグループ化されたテキストです。しばしば、テキストは正方形または長方形のブロックの形をとります

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

で 『回」私が検索

』それは

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

検索されたキーワードの前後に100個の文字を返す方法はありますが返されますか?あなたがこれを行うことができます

+0

最後の100文字を設定するには、 'text.Substring(text.Length - 100、100)'を設定します。 'text.Substring(0、100)'は、最初の100文字を返すために正しいです。 –

+0

があります。しかし、テキストのブロックが500文字で、検索されたキーワードが位置100の中央にある場合はどうなりますか? この場合、これは機能しません。 – KevinC

+0

単語が100文字の制限を超えても単語を切り詰めたくない場合は、空白で 'StringBuilder'と' Split'をキーワード検索と一緒に使うことをお勧めします:http://joelabrahamsson.com/c-method-for -cropping-text-without-breaking-words /を指定します。 –

答えて

1
 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

ありがとうございました。私はコードabitを変更しました ----- before = s.Substring(firstfound - 99、firstfound - (firstfound - 99)); – KevinC

2

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

+0

もう少し汎用的にするには、 '0'を次のように置き換えてください:Math.Max(0、firstfound - 100) –

0

あなたはそれがもう少し再利用可能とキーワードの複数のインスタンスを一致させることができ作るだけでなく、このような何かを行うことができ

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); 
} 

出力を与える

...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... 
関連する問題