Каков самый простой способ в С# обрезать новую строку строки?

Я хочу убедиться, что _content не заканчивается символом NewLine:

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

но код выше не работает, поскольку Trim, похоже, не имеет перегруженного параметра для коллекции строк, только символы.

Каков самый простой однострочный элемент для удаления Enivronment.Newline из конца строки?

Ответ 1

Для меня работает следующее.

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

или

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

Ответ 2

Как насчет:

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

.Trim() удаляет \r\n для меня (используя .NET 4.0).

Ответ 4

Используйте Framework. Метод ReadLine() имеет следующие значения:

Линия определяется как последовательность символы, за которыми следует строка ( "\n" ), возврат каретки ( "\ r" ) или возврат каретки сразу же по строке ( "\ r\n" ). Струна которое не возвращается завершение возврата каретки или линии корма.

Итак, следующее будет делать трюк

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

Ответ 5

Что насчет

_content = sb.ToString().Trim(Environment.NewLine.ToCharArray());

Ответ 6

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

Это, конечно, удалит "\ r\r\r\r", а также "\n\n\n\n" и другие комбинации. И в "средах", где NewLine отличается от "\n\r", вы можете столкнуться с каким-то странным поведением: -)

Но если вы можете жить с этим, я верю, что это самый эффективный способ удалить новые строковые символы в конце строки.

Ответ 7

Как насчет просто:

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

Это приведет к вытеснению всех пробельных символов из конца строки - только проблема, если вы хотите сохранить непрозрачные пробелы.

Ответ 8

В некотором смысле неответ, но самый простой способ обрезать новую строку строки - это не иметь новую строку в строке в первую очередь, убедившись, что она никогда не отображается вашим собственным кодом. То есть, используя собственные функции, которые удаляют новую строку. Многие методы stream и file/io не будут включать новую строку, если вы запрашиваете вывод по очереди, хотя может потребоваться обернуть что-то в System.IO.BufferedStream.

Такие вещи, как System.IO.File.ReadAllLines, могут использоваться вместо System.IO.File.ReadAllText в большинстве случаев, а ReadLine можно использовать вместо Read после того, как вы работаете с правильным типом потока (например, BufferedStream).

Ответ 9

Как заметил Маркус, 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 + "'");
    }

Ответ 10

Мне пришлось удалить новые строки по всему тексту. Поэтому я использовал:

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