WinForms文本框中的换行符

时间:2010-08-20 11:26:53

标签: c# regex winforms

我在处理换行符时遇到了一些麻烦。基本上,用户将一些数据放入文本框,然后直接保存到数据库中。

当我在程序中显示数据时,我只想显示文本框的第一行,所以我试过

Regex newLine = new Regex("/[\r\n]+/");
String[] lines = newLine.Split(row[data.textColumn.ColumnName].ToString());
SomeLabel.Text = lines[0];

但它会显示我接连不断的所有行,所以如果用户放入

a
b
c

标签显示

abc

我怎样才能让它工作,所以它只显示第一行?

2 个答案:

答案 0 :(得分:2)

(我在另一个答案中添加了这个,因为这个答案相当大,我认为这会使这个帖子更清晰 - 如果我应该给它一个答案,请发表评论)

我已经制作了这种扩展方法,它通常有其用途:

public static IEnumerable<string> Lines(this string data)
{
    using (var sr = new StringReader(data))
    {
        string line;

        while ((line = sr.ReadLine()) != null)
            yield return line;
    }
}

你可以获得第一行:

var line = data.Lines().First();

当仅使用一部分行时,这应该比.Split快很多。

答案 1 :(得分:1)

var data = row[data.textColumn.ColumnName].ToString();

其中一个(都使用unix和windows line-seperators)。第一个是最快的,因为当你只使用第一个时,它不会分割每一行。

int min = Math.Min(data.IndexOf("\r\n"), data.IndexOf("\n"));

string line;

if (min != -1)
    line = data.Substring(0, min);
else
    line = data;

var lines = data.Split(new[] { "\r\n", "\n" }, StringSplitOptions.None);
var line = lines[0];

(另请参阅我在此处发布的一些扩展方法:How can I convert a string with newlines in it to separate lines?