改行を含む文字列テキストがあれば、テキスト内の項目に一致する検索キーワードがあります。 。C#でテキスト内の検索文字列のコンテキストを取得する
searchIdx =検索インデックス(GetSearchContextに連続した各呼び出しのためなど、1その後、0から始まる最初は0
contextsTxt =文字列で始まる:私はC#で次のように実装するにはどうすればよい
contextsTxtで
NUMLINES = searchTxt(すなわち見出さ周囲返す行数を検索する
searchTxt =キーワードで検索するデータ。1 = searchTxtが上に見られるライン、2ラインにsearcを= hTxtラインsearchTxtが上に見られる= searchTxt上の行は、上に発見され、3に見出され、そしてsearchTxt下の行)は
が戻りパラメータに基づいて、「コンテキスト」に見出される
文字列GetSearchContext(int searchIdx、文字列contentsTxt、文字列searchTxt、int numLines);
これを実現するためのより良い機能のインターフェースがある場合は、それも同様に提案することができます。
私は次のことを試してみましたが、適切にすべての時間を動作するようには思えません。
private string GetSearchContext(string contentValue, string search, int numLines)
{
int searchIdx = contentValue.IndexOf(search);
int startIdx = 0;
int lastIdx = 0;
while (startIdx != -1 && (startIdx = contentValue.IndexOf('\n', startIdx+1)) < searchIdx)
{
lastIdx = startIdx;
}
startIdx = lastIdx;
if (startIdx < 0)
startIdx = 0;
int endIdx = searchIdx;
int lineCnt = 0;
while (endIdx != -1 && lineCnt++ < numLines)
{
endIdx = contentValue.IndexOf('\n', endIdx + 1);
}
if (endIdx == -1 || endIdx > contentValue.Length - 1)
endIdx = contentValue.Length - 1;
string lines = contentValue.Substring(startIdx, endIdx - startIdx + 1);
if (lines[0] == '\n')
lines = lines.Substring(1);
if (lines[lines.Length - 1] == '\n')
{
lines = lines.Substring(0, lines.Length - 1);
}
if (lines[lines.Length - 1] == '\r')
{
lines = lines.Substring(0, lines.Length - 1);
}
return lines;
}
これは宿題の問題ですか?そうであれば、あなたは正直で、これで実際の助けを得るかもしれません。さもなければ、私はちょうどあなたが望むことをするために、単にSystem.StringメソッドContains(String)を呼び出すようにアドバイスします。 – Josh
あなたが探しているのはちょっと複雑ですが、改行の文字列を行の配列に分割し、検索文字列を探して各行を繰り返します。 – Josh