如何可靠地将TextBox的内容拆分成行?

时间:2015-12-03 22:32:00

标签: c# winforms debugging textbox line-breaks

当我得到TextBox.Text时,我该如何将其拆分成行?

对于文本文件,我通过在\r\n处拆分来做到这一点(Notepad ++)。对于TextBox,通常是\r\n,但显然并非总是如此 - 因为我的\r\n分割偶尔会因粘贴输入而失败。幸运的是,对于文本文件,我可以使用Notepad ++的“显示所有字符”功能来检查空白。但是,如何查看TextBox中的字符?

显然TextBox本身知道如何处理这个问题,因为它能够在正确的位置显示带有换行符的文本。如何在var s = MyTextBox.Text;显示休息的每个位置s和“拆分TextBox?”

修改:我已经检查了我的正则表达式,实际上我已经在Environment.Newline而不是\r\n分裂了。

2 个答案:

答案 0 :(得分:1)

如果是TextBox,您可以按照评论中的建议使用Lines属性。但是你也可能需要在其他情况下从字符串中获取行。

为此,我使用基于StringReader的扩展方法:

public static IEnumerable<string> GetLines(this string s)
{
    using (var reader = new StringReader(s))
    {
        string line;
        while ((line = reader.ReadLine()) != null)
        {
            yield return line;
        }
    }
}

(此方法也适用于我的NString library

你可以像这样使用它:

string[] lines = textBox.Text.GetLines().ToArray();

StringReader类知道分割线的位置,它可能比使用正则表达式更快(只是一种直觉,我实际上没有对它进行基准测试 编辑:我只做了一个快速的基准测试,StringReaderRegex 快了约6倍)

答案 1 :(得分:0)

您可以使用

var lines = Regex.Split(s, @"\r\n|\r|\n");

无论新线来自哪里,都可以在任何新线上可靠地分割。