在C#中修剪字符串的换行符最简单的方法是什么?

时间:2009-06-24 12:22:43

标签: c# string

我想确保_content不以NewLine字符结尾:

_content = sb.ToString().Trim(new char[] { Environment.NewLine });

上面的代码不起作用,因为Trim似乎没有字符串集合的重载参数,只有字符。

从字符串末尾删除Enivronment.Newline的最简单的一行是什么?

10 个答案:

答案 0 :(得分:219)

以下适用于我。

sb.ToString().TrimEnd( '\r', '\n' );

sb.ToString().TrimEnd( Environment.NewLine.ToCharArray());

答案 1 :(得分:29)

.Trim()为我删除\r\n(使用.NET 4.0)。

答案 2 :(得分:14)

怎么样:

public static string TrimNewLines(string text)
{
    while (text.EndsWith(Environment.NewLine))
    {
        text = text.Substring(0, text.Length - Environment.NewLine.Length);
    }
    return text;
}

如果有多个换行符,效率会有些低,但它会起作用。

或者,如果您不介意修剪(例如)"\r\r\r\r""\n\n\n\n"而不仅仅是"\r\n\r\n\r\n"

// No need to create a new array each time
private static readonly char[] NewLineChars = Environment.NewLine.ToCharArray();

public static string TrimNewLines(string text)
{
    return text.TrimEnd(NewLineChars);
}

答案 3 :(得分:8)

使用框架。 ReadLine()方法有如下说法:

  

一条线被定义为一系列   字符后跟换行符   (“\ n”),回车(“\ r”)或a   马车返回后立即   通过换行符(“\ r \ n”)。字符串   返回的内容不包含   终止回车或线路   进料。

所以以下将会做到这一点

_content = new StringReader(sb.ToString()).ReadLine();

答案 4 :(得分:5)

怎么样?
_content = sb.ToString().Trim(Environment.NewLine.ToCharArray());

答案 5 :(得分:4)

_content = sb.TrimEnd(Environment.NewLine.ToCharArray());

这当然会删除“\ r \ n \ r \ n \ r \ n”以及“\ n \ n \ n \ n”和其他组合。 在NewLine不是“\ n \ r”的“环境”中,你可能会遇到一些奇怪的行为: - )

但是如果你能忍受这个,那么我相信这是在字符串末尾删除新行字符最有效的方式。

答案 6 :(得分:2)

如何:

string text = sb.ToString().TrimEnd(null)

这将从字符串的末尾拉出所有空白字符 - 如果你想保留非换行符空格,则只会出现问题。

答案 7 :(得分:1)

有些不回答,但是从字符串中修剪换行符的最简单方法是首先不要在字符串上添加换行符,方法是确保自己的代码永远不会看到它。也就是说,通过使用删除换行符的本机函数。如果逐行请求输出,许多流和文件/ io方法将不包括换行符,尽管可能需要将某些内容包装在System.IO.BufferedStream中。

System.IO.File.ReadAllLines之类的内容可以在大多数情况下代替System.IO.File.ReadAllText,而ReadLine可以在您使用正确的类型后使用Read代替BufferedStream流(例如{{1}})。

答案 8 :(得分:0)

Markus指出TrimEnd现在正在做这项工作。我需要在Windows Phone 7.8环境中从字符串的两端获取换行符和空格。在追逐了不同的更复杂的选项后,我的问题只通过使用Trim()解决了 - 很好地通过了以下测试

   [TestMethod]
    [Description("TrimNewLines tests")]
    public void Test_TrimNewLines()
    {
        Test_TrimNewLines_runTest("\n\r     testi    \n\r", "testi");
        Test_TrimNewLines_runTest("\r     testi    \r", "testi");
        Test_TrimNewLines_runTest("\n     testi    \n", "testi");
        Test_TrimNewLines_runTest("\r\r\r\r\n\r     testi   \r\r\r\r \n\r", "testi");
        Test_TrimNewLines_runTest("\n\r  \n\n\n\n   testi äål.,    \n\r", "testi äål.,");
        Test_TrimNewLines_runTest("\n\n\n\n     testi  ja testi  \n\r\n\n\n\n", "testi  ja testi");
        Test_TrimNewLines_runTest("", "");
        Test_TrimNewLines_runTest("\n\r\n\n\r\n", "");
        Test_TrimNewLines_runTest("\n\r \n\n \n\n", "");
    }

    private static void Test_TrimNewLines_runTest(string _before, string _expected)
    {
        string _response = _before.Trim();
        Assert.IsTrue(_expected == _response, "string '" + _before + "' was translated to '" + _response + "' - should have been '" + _expected + "'");
    }

答案 9 :(得分:-2)

我不得不删除整个文本中的新行。所以我用过:

            while (text.Contains(Environment.NewLine))
            {
                text = text.Substring(0, text.Length - Environment.NewLine.Length);
            }