Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何根据字符串中的行号搜索文本_C#_String_Substring - Fatal编程技术网

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

C# 如何根据字符串中的行号搜索文本,c#,string,substring,C#,String,Substring,我有一个函数,它搜索字符串中的文本并返回包含特定子字符串的行 private static string getLine(string text,string text2Search) { string currentLine; using (var reader = new StringReader(text)) { while ((currentLine= reader.ReadLine()) != null) {

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

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

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

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

String.Contains没有重载获取
StringComparison.OrdinalIgnoreCase

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

String.Contains没有重载获取
StringComparison.OrdinalIgnoreCase

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

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

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

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

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

您是在找到这一行后尝试返回所有行,还是只搜索其他文本?我只想返回一行,比如在第10行之后,其中包含
texttosearch
。您是在找到这一行后尝试返回所有行吗你找到了这一行,或者只是搜索其他文本?我只想在第10行之后返回一行,其中包含
texttosearch
。+1我的想法完全正确(不过我会使用
FirstOfDefault
,不确定是否始终存在匹配).我随身带着字符串,没有文件,所以我不能使用
文件。ReadLines
@user3924730不,你绝对可以使用File.ReadLines.+1我的想法完全正确(虽然我会使用
FirstOfDefault
,但不确定是否总是匹配)。我随身带着字符串,没有文件,所以我不能使用
文件。ReadLines
@user3924730不,您完全可以使用File.ReadLines。您的代码无法编译。如果没有匹配怎么办?@EZI-很好,我把代码改回了原来的样子。编辑:事实上,我再次修改了它,如果找不到空字符串,则返回空字符串,因为我不喜欢返回最后一行,因为您的代码无法编译。如果没有匹配怎么办?@EZI-很好,我把代码改回了原来的样子。编辑:事实上,我再次更改了它,如果没有找到,则返回一个空字符串,因为我不喜欢返回最后一行的想法