Вопрос по string, c# – Какой самый простой способ в C # обрезать символ новой строки?

97

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

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

ноabove code doesn't work поскольку в Trim, похоже, нет перегруженного параметра для набора строк, только символы.

What is the simplest one-liner to remove an Enivronment.Newline from the end of a string?

Кстати, вы, вероятно, хотите TrimEnd Marc Gravell♦

Ваш Ответ

10   ответов
5

Как насчет

_content = sb.ToString().Trim(Environment.NewLine.ToCharArray());
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededquiteError: User Rate Limit Exceeded
4
_content = sb.TrimEnd(Environment.NewLine.ToCharArray());

Это, конечно, удалит & quot; \ r \ r \ r \ r & quot; а также \ n \ n \ n \ n & quot; и другие комбинации. И в «Окружающей среде» где NewLine отличается от & quot; \ n \ r & quot; Вы можете получить некоторые странные поведения :-)

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

1

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

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

2

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

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

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

-2

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

            while (text.Contains(Environment.NewLine))
            {
                text = text.Substring(0, text.Length - Environment.NewLine.Length);
            }
Error: User Rate Limit Exceeded
0

Как отметил Маркус, 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 + "'");
    }
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);
}
Error: User Rate Limit Exceeded
215

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

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

или же

sb.ToString().TrimEnd( Environment.NewLine.ToCharArray());
Error: User Rate Limit Exceeded Edward Tanguay
Error: User Rate Limit Exceededwhite spaceError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededmsdn.microsoft.com/de-de/library/…Error: User Rate Limit Exceededmsdn.microsoft.com/de-de/library/…
8

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

A line is defined as a sequence of characters followed by a line feed ("\n"), a carriage return ("\r") or a carriage return immediately followed by a line feed ("\r\n"). The string that is returned does not contain the terminating carriage return or line feed.

Таким образом, следующее поможет

_content = new StringReader(sb.ToString()).ReadLine();
Error: User Rate Limit Exceeded
29

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

Error: User Rate Limit Exceeded

Похожие вопросы