如何从string中删除新的行字符?

我有以下格式的string

string s = "This is a Test String.\n This is a next line.\t This is a tab.\n' 

我想从上面的string中删除\n\r所有事件。

我已经尝试过string s = s.Trim(new char[] {'\n', '\r'}); 但它没有帮助。

我喜欢使用正则expression式。 在这种情况下,你可以这样做:

 string replacement = Regex.Replace(s, @"\t|\n|\r", ""); 

正则expression式在.NET世界中并不像在dynamic语言中那样受欢迎,但是它们提供了大量的操作string的能力。

你想使用String.Replace删除一个字符。

 s = s.Replace("\n", String.Empty); s = s.Replace("\r", String.Empty); s = s.Replace("\t", String.Empty); 

请注意, String.Trim(params char[] trimChars)只能从调用的实例中删除String.Trim(params char[] trimChars)中的前导字符和尾随字符。

你可以做一个扩展方法,避免了上面做很多临时string的性能问题:

 static string RemoveChars(this string s, params char[] removeChars) { Contract.Requires<ArgumentNullException>(s != null); Contract.Requires<ArgumentNullException>(removeChars != null); var sb = new StringBuilder(s.Length); foreach(char c in s) { if(!removeChars.Contains(c)) { sb.Append(c); } } return sb.ToString(); } 

我知道这是一个旧的post,但我想我会分享我用来删除新行字符的方法。

 s.Replace(Environment.NewLine, ""); 

参考文献:

MSDN String.Replace方法和MSDN Environment.NewLine属性

如果速度和低内存使用率很重要,请做这样的事情:

 var sb = new StringBuilder(s.Length); foreach (char i in s) if (i != '\n' && i != '\r' && i != '\t') sb.Append(i); s = sb.ToString(); 

就这样做

 s = s.Replace("\n", String.Empty).Replace("\t", String.Empty).Replace("\r", String.Empty); 

LINQ方法:

 string s = "This is a Test String.\n This is a next line.\t This is a tab.\n'"; string s1 = String.Join("", s.Where(c => c != '\n' && c != '\r' && c != '\t')); 

正确的select实际上取决于inputstring有多大,以及perforce和内存要求是什么,但是我会使用正则expression式

 string result = Regex.Replace(s, @"\r\n?|\n|\t", String.Empty); 

或者,如果我们需要多次应用相同的replace,最好使用正则expression式的编译版本

 var regex = new Regex(@"\r\n?|\n|\t", RegexOptions.Compiled); string result = regex.Replace(s, String.Empty); 

注意:不同的scheme要求不同的方法来实现最佳性能和最小内存消耗

那么…我希望你了解更具体的空间领域。 \t实际上是作为一个水平空间来分类的,而不是一个垂直空间。 (testing在记事本中插入\t

如果您使用Java,只需使用\v 。 请参阅下面的参考。

\h – 一个水平的空格字符:

[\t\xA0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000]

\v – 一个垂直的空格字符:

[\n\x0B\f\r\x85\u2028\u2029]

但是我知道你使用.NET。 所以我的答案是更换每个垂直空间

 string replacement = Regex.Replace(s, @"[\n\u000B\u000C\r\u0085\u2028\u2029]", ""); 

仅供参考,

修剪()已经做到了。

以下的LINQPad示例:

 void Main() { var s = " \rsdsdsdsd\nsadasdasd\r\n "; s.Length.Dump(); s.Trim().Length.Dump(); } 

输出:

 23 18 

如果要从开始和结束中删除,可以使用Trim

 string stringWithoutNewLine = "\n\nHello\n\n".Trim();