如何根据字符串中的行号搜索文本

本文关键字:搜索 文本 何根 字符串 | 更新日期: 2023-09-27 18:19:28

我有一个函数,它搜索字符串中的文本,并返回包含特定子字符串的行。。

private static string getLine(string text,string text2Search)
{
    string currentLine;
    using (var reader = new StringReader(text)) 
    {
        while ((currentLine= reader.ReadLine()) != null) 
        {
            if (currentLine.Contains(text2Search,StringComparison.OrdinalIgnoreCase))
            {
                break;
            }
        }
    }
    return currentLine;
}

现在,在我的情况下,我必须开始搜索特定行之后的行,假设这里是10。意味着必须开始搜索字符串中10行之后的特定文本。所以我的问题是如何将其添加到当前函数中。。请帮帮我。

如何根据字符串中的行号搜索文本

您可以将File.ReadLines方法与Skip:一起使用

var line = File.ReadLines("path").Skip(10)
.SkipWhile(line => !line.Contains(text2Search,StringComparison.OrdinalIgnoreCase))
.First();

您可以在当前代码中引入一个计数器,如下所示:

private static string getLine(string text,string text2Search)
{
    string currentLine;
    int endPoint = 10;
    using (var reader = new StringReader(text)) 
    {
        int lineCount = 0;
        while ((currentLine= reader.ReadLine()) != null) 
        {
            if (lineCount++ >= endPoint && 
                currentLine.Contains(text2Search,StringComparison.OrdinalIgnoreCase))
            {
                return currentLine;
            }
        }
    }
    return string.Empty;
}

或者,使用您当前的代码将所有行添加到列表中,然后您就可以在其中使用Selmans答案。

String.Contains不具有占用StringComparison.OrdinalIgnoreCase 的过载

var match = text.Split(new char[]{''n',''r'})
            .Skip(10)
            .FirstOrDefault(line=>line.IndexOf("", StringComparison.OrdinalIgnoreCase)>=0);