我有一个如下格式的字符串

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

我想从上面的字符串中删除所有出现的\n和\r。

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


当前回答

FYI,

Trim()已经做到了。

以下LINQPad示例:

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

输出:

23
18

其他回答

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

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

引用:

MSDN字符串。替换方法和MSDN环境。换行符属性

FYI,

Trim()已经做到了。

以下LINQPad示例:

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

输出:

23
18

如果您想从开始和结束删除,可以使用修剪。

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

正确的选择实际上取决于输入字符串的大小以及强制和内存要求,但我会使用像这样的正则表达式

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

或者如果我们需要多次应用相同的替换,最好使用Regex的编译版本,如

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

注意:不同的场景需要不同的方法来获得最佳的性能和最小的内存消耗

嗯…我想让你们了解更具体的空间领域。\t实际上被分类为水平空间,而不是垂直空间。(测试在记事本中插入\t)

如果使用Java,只需使用\v即可。请参阅下面的参考资料。

\h -水平空白字符: [\ t \ xA0 \ u1680 \ u180e \ u2000 - \ u200a \ u202f \ u205f \ u3000] \v -垂直空白字符: [f \ r \ n \ x0B \ \ x85 \ u2028 \ u2029]

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

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