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

时间:2014-08-26 06:58:46

标签: c# string substring

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

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.Aans必须在10行之后开始搜索字符串中的特定文本。所以我的查询是如何将它添加到我当前的函数中.. 请帮帮我。

3 个答案:

答案 0 :(得分:4)

您可以将File.ReadLines方法与Skip

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

答案 1 :(得分:1)

您可以将计数器引入当前代码,如下所示:

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答案。

答案 2 :(得分:0)

String.Contains没有超载StringComparison.OrdinalIgnoreCase

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