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



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



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


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



что самое простое ОДН-вкладыш для того чтобы извлечь Enivronment.Новая строка с конца строки?

739   10  

10 ответов:

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

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

или

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

.Trim() выводит \r\n для меня (с помощью .NET 4.0).

как насчет:

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

использовать рамки. Метод ReadLine () имеет следующее выражение:

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

Так что следующее будет делать трюк

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

а как же

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

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

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

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

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

это вытянет все пробелы из конца строки - только проблема, если вы хотите сохранить пробелы без новой строки.

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

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

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

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

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

Comments

    Ничего не найдено.