我在处理换行符时遇到了一些麻烦。基本上,用户将一些数据放入文本框,然后直接保存到数据库中。
当我在程序中显示数据时,我只想显示文本框的第一行,所以我试过
Regex newLine = new Regex("/[\r\n]+/");
String[] lines = newLine.Split(row[data.textColumn.ColumnName].ToString());
SomeLabel.Text = lines[0];
但它会显示我接连不断的所有行,所以如果用户放入
a
b
c
标签显示
abc
我怎样才能让它工作,所以它只显示第一行?
答案 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?)