在C#中移除字符串末尾的回车和换行符

137
如何从字符串末尾删除回车符(\r)和Unix换行符(\n)
13个回答

229

这将从s的末尾修剪掉任何回车符和换行符的组合:

s = s.TrimEnd(new char[] { '\r', '\n' });

编辑: 正如JP友善地指出的那样,您可以更简洁地拼写为:

s = s.TrimEnd('\r', '\n');

10
请注意 TrimEnd 声明中的 params 关键字,它可以让你传递多个字符实例而不需要使用数组。http://msdn.microsoft.com/en-us/library/w5zay9db(VS.71).aspx - JP Alioto
4
这样怎么样:s = s.TrimEnd(System.Environment.NewLine.ToCharArray()); - Ε Г И І И О
4
自从 C# 的 v1.0 发布(10 年前),我一直在使用它编写代码。现在你告诉我 TrimEnd 这个函数,真是我太傻了! - s15199d
7
只是出于兴趣,你只需要使用s = s.TrimEnd() -因为文档上说:如果trimChars为null或空数组,则删除Unicode空白字符。 请参见String.TrimEnd - Stuart Wood
这是正确的答案:https://stackoverflow.com/a/35890472/229930 - Dean Kuga
显示剩余2条评论

34

这应该可以运行...

var tst = "12345\n\n\r\n\r\r";
var res = tst.TrimEnd( '\r', '\n' );

22
String temp = s.Replace("\r\n","").Trim();

s 是原始字符串。(注意大写字母)


14
这也会:1)从字符串中删除\r\n,2)从字符串开头删除任何空白字符,3)从字符串末尾删除任何空白字符。 - RichieHindle
真的,我假设只有一个/r/n在结尾。这在原始帖子中没有提到。我不确定是否值得-1票。 - Crash893
4
使用replace()trim()一起使用是否有点过度,因为只用TrimEnd()就足够了,或者我漏掉了什么? - ᴍᴀᴛᴛ ʙᴀᴋᴇʀ
很好的建议 @MattBaker - Crash893
在这种模式下,最好是分开使用s.Replace("\n","").Replace("\r","").trim() - undefined

20

如果你正在使用多个平台,使用这种方法会更安全。

value.TrimEnd(System.Environment.NewLine.ToCharArray());

它将考虑不同的换行符和回车符。


JP的方法——tst.TrimEnd('\r', '\n')——在实践中是相当“安全”的,因为主要的EOLs [目前]只是\r\n的不同组合,但alexw的答案才是“正确”的。让CLR告诉你这个平台的换行符是什么字符。EOL并不总是由0D和0A组成 - ruffin
我曾经使用过 Environment.NewLine,但它似乎无法处理没有 \n\r 实例。在这种情况下,TrimEnd('r','\n') 更加可靠。 - ᴍᴀᴛᴛ ʙᴀᴋᴇʀ
3
可能这实际上是一个跨平台问题,dec需要明确地删除\r\n,而不管系统环境如何。 - Andrew Hill

10
s.TrimEnd();

上述内容是我需要的,它可以去除字符串末尾的'\r\n'。
被点赞的答案在我看来是错误的。首先,当我尝试时它没有起作用,其次,如果它确实起作用,我会认为 s.TrimEnd('\r', '\n') 只会删除一个 '\r' 或者一个 '\n',所以我必须运行它两次——一次是当 '\n' 在末尾时,第二次是当 '\r' 在末尾时(现在 '\n' 已被删除)。

1
这段代码可以去除\r和\n,但也会去除所有的空格,所以在某些情况下可能会过头。请注意此方法的文档:“如果trimChars为null或为空数组,则删除Unicode空格字符。” - Craig

4
string k = "This is my\r\nugly string. I want\r\nto change this. Please \r\n help!";
k = System.Text.RegularExpressions.Regex.Replace(k, @"\r\n+", " ");

4

对于我们的 VBers:

TrimEnd(New Char() {ControlChars.Cr, ControlChars.Lf})

4
如果总是只有一个CRLF,则:
myString = myString.Substring(0, myString.Length - 2);

如果可能有,也可能没有,那么:
Regex re = new Regex("\r\n$");
re.Replace(myString, "");

这两个方法(出于设计目的)最多只会删除一个CRLF。为了提高性能,可以缓存正则表达式。


3
这太简单了 - 我正在过滤特定的电子邮件条目。我正在编写自己的定制电子邮件垃圾邮件过滤器。由于字符串中包含\r和/或\n,它会清除所有项目而不是过滤它们。
所以,我只需使用filter = filter.Remove('\n')和filter = filter.Remove('\r')。我正在制作我的过滤器,以便最终用户可以使用记事本直接编辑文件,因此无法确定这些字符可能嵌入哪里 - 可能不仅仅是在字符串的开头或结尾。因此,将它们全部删除即可。
其他条目都有效,但Remove可能是最简单的方法?
我从这篇文章中学到了更多关于Regex的知识 - 在这里使用它非常酷。

看起来你只需要 filter = filter.Remove('\n').Remove('\r'); - John Saunders

2

我使用了很多橡皮擦等级

String donen = "lots of stupid whitespaces and new lines and others..."

//Remove multilines
donen = Regex.Replace(donen, @"^\s+$[\r\n]*", "", RegexOptions.Multiline);
//remove multi whitespaces
RegexOptions options = RegexOptions.None;
Regex regex = new Regex("[ ]{2,}", options);
donen = regex.Replace(donen, " ");
//remove tabs
char tab = '\u0009';
donen = donen.Replace(tab.ToString(), "");
//remove endoffile newlines
donen = donen.TrimEnd('\r', '\n');
//to be sure erase new lines again from another perspective
donen.Replace(Environment.NewLine, "");

现在我们有了一个干净的一行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接