我需要在. net中将字符串分割为换行符,我所知道的分割字符串的唯一方法是使用split方法。然而,这将不允许我(容易)在换行上分裂,那么最好的方法是什么?


当前回答

这里的示例非常棒,帮助我解决了当前的“挑战”,以一种更可读的方式分割rsa密钥。基于Steve Coopers的解决方案:

    string Splitstring(string txt, int n = 120, string AddBefore = "", string AddAfterExtra = "")
    {
        //Spit each string into a n-line length list of strings
        var Lines = Enumerable.Range(0, txt.Length / n).Select(i => txt.Substring(i * n, n)).ToList();
        
        //Check if there are any characters left after split, if so add the rest
        if(txt.Length > ((txt.Length / n)*n) )
            Lines.Add(txt.Substring((txt.Length/n)*n));

        //Create return text, with extras
        string txtReturn = "";
        foreach (string Line in Lines)
            txtReturn += AddBefore + Line + AddAfterExtra +  Environment.NewLine;
        return txtReturn;
    }

呈现一个具有33个字符宽度和引号的RSA-key是很简单的

Console.WriteLine(Splitstring(RSAPubKey, 33, "\"", "\""));

输出:

希望有人觉得它有用…

其他回答

这里的示例非常棒,帮助我解决了当前的“挑战”,以一种更可读的方式分割rsa密钥。基于Steve Coopers的解决方案:

    string Splitstring(string txt, int n = 120, string AddBefore = "", string AddAfterExtra = "")
    {
        //Spit each string into a n-line length list of strings
        var Lines = Enumerable.Range(0, txt.Length / n).Select(i => txt.Substring(i * n, n)).ToList();
        
        //Check if there are any characters left after split, if so add the rest
        if(txt.Length > ((txt.Length / n)*n) )
            Lines.Add(txt.Substring((txt.Length/n)*n));

        //Create return text, with extras
        string txtReturn = "";
        foreach (string Line in Lines)
            txtReturn += AddBefore + Line + AddAfterExtra +  Environment.NewLine;
        return txtReturn;
    }

呈现一个具有33个字符宽度和引号的RSA-key是很简单的

Console.WriteLine(Splitstring(RSAPubKey, 33, "\"", "\""));

输出:

希望有人觉得它有用…

对于字符串变量s:

s.Split(new string[]{Environment.NewLine},StringSplitOptions.None)

这使用了您的环境对行结束符的定义。在Windows上,行结束符是CR-LF(回车,换行)或c#的转义字符\r\n。

这是一个可靠的解决方案,因为如果您用String重新组合这些行。Join,这等于你原来的字符串:

var lines = s.Split(new string[]{Environment.NewLine},StringSplitOptions.None);
var reconstituted = String.Join(Environment.NewLine,lines);
Debug.Assert(s==reconstituted);

不要做什么:

使用StringSplitOptions。RemoveEmptyEntries,因为这将破坏Markdown等标记,其中空行具有语法目的。 在分隔符上拆分新char[]{环境。因为在Windows上,这将为每一行创建一个空字符串元素。

string[] lines = text.Split(
  Environment.NewLine.ToCharArray(), 
  StringSplitOptions.RemoveEmptyStrings);

RemoveEmptyStrings选项将确保由于\n跟在\r后面而没有空条目

(编辑以反映注释:)注意,它也会丢弃文本中的真正空行。这通常是我想要的,但这可能不是你的要求。

根据Guffa的答案,在扩展类中使用:

public static string[] Lines(this string source) {
    return source.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None);
}

我不知道环境。换行,但我想这是一个很好的解决方案。

我的尝试是:

        string str = "Test Me\r\nTest Me\nTest Me";
        var splitted = str.Split('\n').Select(s => s.Trim()).ToArray();

额外的. trim删除了任何可能仍然存在的\r或\n(例如在windows上,但是用os x换行符分隔字符串)。可能不是最快的方法。

编辑:

正如注释所正确指出的那样,这也会删除行开头或新换行之前的任何空白。如果需要保留空白,请使用其他选项之一。