如何从字符串中删除换行符?

时间:2010-11-10 02:32:22

标签: c# .net

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

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'});,但没有帮助。

11 个答案:

答案 0 :(得分:256)

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

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

正则表达式在.NET世界中并不像动态语言那样流行,但它们提供了很多操作字符串的能力。

答案 1 :(得分:61)

您想使用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)仅从调用的实例中删除trimChars中的前导和尾随字符。

你可以制作一个扩展方法,避免上面制作大量临时字符串的性能问题:

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();
}

答案 2 :(得分:36)

我知道这是一篇旧帖子,不过我以为我会分享用来删除新行字符的方法。

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

参考文献:

MSDN String.Replace MethodMSDN Environment.NewLine Property

答案 3 :(得分:13)

如果速度和内存使用率很低,请执行以下操作:

var sb = new StringBuilder(s.Length);

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

s = sb.ToString();

答案 4 :(得分:3)

就这样做

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

答案 5 :(得分:3)

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'));

答案 6 :(得分:0)

正确的选择实际上取决于输入字符串的大小以及perforce和内存要求是什么,但我会使用正则表达式,如

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);

注意:不同的方案需要不同的方法来实现最佳性能和最低内存消耗

答案 7 :(得分:0)

嗯......我希望您了解更具体的空间区域。 \t实际上被分类为水平空间,而不是垂直空间。 (测试在记事本中插入\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]", "");

答案 8 :(得分:0)

string remove = Regex.Replace(txtsp.Value).ToUpper(), @"\t|\n|\r", "");

答案 9 :(得分:-3)

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

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

答案 10 :(得分:-5)

FYI,

Trim()已经这样做了。

以下LINQPad示例:

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

输出:

23
18