当前一行包含字符串时查找所有下一行
本文关键字:一行 查找 字符串 包含 | 更新日期: 2023-09-27 18:36:53
我正在开发一个ASP mvc应用程序,当前一行包含单词时,我正在尝试获取所有下一行
我使用了下面的代码,但我只能得到包含给定单词的最后一行
int counter = 0;
string line;
List<string> found = new List<string>();
// Read the file and display it line by line.
System.IO.StreamReader file = new System.IO.StreamReader("C:''Users''Chaimaa''Documents''path.txt");
while ((line = file.ReadLine()) != null)
{
if (line.Contains("fact"))
{
found.Add(line);
}
foreach (var i in found)
{
var output = i;
ViewBag.highlightedText = output;
}
}
关于我应该添加什么的任何帮助1-获取包含单词的所有行2- 最好得到所有下一行
您可以使用提供索引的重载 Where
,将索引存储在哈希集中,并使用包含检查来决定是否应保留行,如下所示:
var seen = new HashSet<int>();
var res = data.Where((v, i) => {
if (v.Contains("fact")) {
seen.Add(i);
}
return seen.Contains(i-1);
});
演示。
作为附带的好处,seen
将包含找到单词"fact"
的所有行的索引。
您可以编写一个 PairWise
方法,该方法接受一系列值并返回一个序列,其中包含与其前面的项配对的每个项:
public static IEnumerable<Tuple<T, T>> Pairwise<T>(this IEnumerable<T> source)
{
using (var iterator = source.GetEnumerator())
{
if (!iterator.MoveNext())
yield break;
T prev = iterator.Current;
while (iterator.MoveNext())
{
yield return Tuple.Create(prev, iterator.Current);
prev = iterator.Current;
}
}
}
使用此方法,我们可以配对每一行,获取前一个值包含单词的行,然后投影出第二个值,即它后面的行:
var query = lines.Pairwise()
.Where(pair => pair.Item1.Contains(word))
.Select(pair => pair.Item2);