我通过一个事件收到一个字符串消息,我将它放在一个TextBox中。 不幸的是,这条消息有很多空行。如何用一个替换两个空行?
我的第一个想法是这样的:
string newLine = Environment.NewLine;
textbox.text = msg.Replace(newLine + newLine, newLine);
我确信有更好的方法可以实现这一目标。
答案 0 :(得分:5)
您可以使用RegEx.Replace
。
事实上,关于该功能的MSDN文章展示了如何摆脱太多的空白,非常接近你想要做的事情:
http://msdn.microsoft.com/en-us/library/xwewhkd1.aspx
为了您的目的,而不是寻找空白:
"\\s+";
您想查找换行符:
"\\n+";
答案 1 :(得分:5)
如何将string.Split()
与RemoveEmptyEntries
选项一起使用:
message = string.Join(Environment.NewLine, message.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries));
这也将涵盖连续两个以上的新行,而不是仅仅两个。
答案 2 :(得分:3)
但如果连续三个换行符,那么您的String.Replace
解决方案就无法运行。例如,考虑:
string s = "hello\n\n\n\n\n\n\n\n\n\n\n\nworld";
string s1 = s.Replace("\n\n", "\n");
string s2 = Regex.Replace(s, "\\n{2,}", "\n");
s1
将包含多个\n
个字符。 s2
只有一个。
这是以\n
为例,但如果您使用Environment.NewLine
(即\r\n
),则同样适用。
答案 3 :(得分:2)
textbox.text = Regex.Replace(inputText, @"(" + Environment.NewLine + ")+", Environment.NewLine);
应该做的伎俩
答案 4 :(得分:1)
你可以使用正则表达式,但是你有两个问题。您的代码更简单 - 使用String.Replace。
答案 5 :(得分:0)
这假设有两件事。
1)您要替换的换行符是Windows换行符,并说出Unix换行符。
2)您只想替换“换行符+换行符”发生的实例,而不是“换行符+换行符+换行符”,这将是“换行符+换行符”。记住String.Replace会创建一个新字符串。
换句话说,你的想法是有缺陷的。