Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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#中字符串的前n行?_C#_.net_String - Fatal编程技术网

如何删除C#中字符串的前n行?

如何删除C#中字符串的前n行?,c#,.net,string,C#,.net,String,如何删除字符串中的前n行 例如: String str = @"a b c d e"; String output = DeleteLines(str, 2) //Output is "c //d //e" (search for Environment.NewLine)和子字符串的组合应该可以做到这一点。您可以使用LINQ: String str = @"a b c d e"; int n = 2; string[] lines = str .Split(Environment.

如何删除字符串中的前n行

例如:

String str = @"a
b
c
d
e";

String output = DeleteLines(str, 2)
//Output is "c
//d
//e"
(search for Environment.NewLine)和子字符串的组合应该可以做到这一点。

您可以使用LINQ:

String str = @"a
b
c
d
e";

int n = 2;
string[] lines = str
    .Split(Environment.NewLine.ToCharArray())
    .Skip(n)
    .ToArray();

string output = string.Join(Environment.NewLine, lines);

// Output is 
// "c
// d
// e"
请尝试以下操作:

    private static string DeleteLines(string input, int lines)
    {
        var result = input;
        for(var i = 0; i < lines; i++)
        {
            var idx = result.IndexOf('\n');
            if (idx < 0)
            {
                // do what you want when there are less than the required lines
                return string.Empty;
            }
            result = result.Substring(idx+1);
        }
        return result;
    }
public static string DeleteLines(string s, int linesToRemove)
{
    return s.Split(Environment.NewLine.ToCharArray(), 
                   linesToRemove + 1
        ).Skip(linesToRemove)
        .FirstOrDefault();
}
私有静态字符串DeleteLines(字符串输入,int行)
{
var结果=输入;
对于(变量i=0;i
注:这种方法对于非常长的多行字符串不理想,因为它不考虑内存管理。如果处理这类字符串,我建议您更改方法以使用StringBuilder类。

尝试以下操作:

    private static string DeleteLines(string input, int lines)
    {
        var result = input;
        for(var i = 0; i < lines; i++)
        {
            var idx = result.IndexOf('\n');
            if (idx < 0)
            {
                // do what you want when there are less than the required lines
                return string.Empty;
            }
            result = result.Substring(idx+1);
        }
        return result;
    }
public static string DeleteLines(string s, int linesToRemove)
{
    return s.Split(Environment.NewLine.ToCharArray(), 
                   linesToRemove + 1
        ).Skip(linesToRemove)
        .FirstOrDefault();
}
下一个例子:

string str = @"a
b
c
d
e";
string output = DeleteLines(str, 2);
返回

c
d
e

如果需要考虑“\r\n”和“\r”以及“\n”,最好使用以下正则表达式:

public static class StringExtensions
{
    public static string RemoveFirstLines(string text, int linesCount)
    {
        var lines = Regex.Split(text, "\r\n|\r|\n").Skip(linesCount);
        return string.Join(Environment.NewLine, lines.ToArray());
    }
}

有关将文本拆分为行的更多详细信息。

具有删除前n行或后n行的功能:

public static string DeleteLines(
     string stringToRemoveLinesFrom, 
     int numberOfLinesToRemove, 
     bool startFromBottom = false) {
            string toReturn = "";
            string[] allLines = stringToRemoveLinesFrom.Split(
                    separator: Environment.NewLine.ToCharArray(),
                    options: StringSplitOptions.RemoveEmptyEntries);
            if (startFromBottom)
                toReturn = String.Join(Environment.NewLine, allLines.Take(allLines.Length - numberOfLinesToRemove));
            else
                toReturn = String.Join(Environment.NewLine, allLines.Skip(numberOfLinesToRemove));
            return toReturn;
}
试试这个:

public static string DeleteLines (string text, int lineCount) {
    while (text.Split('\n').Length > lineCount)
        text = text.Remove(0, text.Split('\n')[0].Length + 1);
    return text;
}
它可能效率不高,但对于我最近正在进行的小项目来说,它非常适合

公共静态字符串DeleteLines(字符串输入,int-linesToSkip)
public static string DeleteLines(string input, int linesToSkip)
{
    int startIndex = 0;
    for (int i = 0; i < linesToSkip; ++i)
        startIndex = input.IndexOf('\n', startIndex) + 1;
    return input.Substring(startIndex);
}
{ int startIndex=0; 对于(int i=0;i
请告诉我,但您需要
StringSplitOptions。删除mptyentries
,因为Split解释\r\nseparately@Marlon-我不确定删除空条目是否是问题中的一项要求。我想这不是因为问题的重点是行,而不是字符/单词。你害怕把所有内容都放在一行不可读的行中?称之为LINQ的正确使用?;)如果内容有空行,则在删除时返回错误的结果。为什么不查找第n个
\n
并从该点开始执行单个子字符串呢。所以上面的许多答案都是非常低效的,我希望这一个能用简单的方法来做。我知道这是@LukášNovotný的答案(他引用了,但没有在这里重复)。你能将你提到的答案的相关部分粘贴到你的答案中吗?最好在代码中加入一些上下文/解释,因为这会使答案对OP和未来的读者更有用(特别是因为这是一个老问题,已经有了其他几个高质量的答案)。在任何项目中都不应该像这样使用拆分,将其声明为变量并重用。这是一个非常坏的习惯。