Каков самый простой способ в C# обрезать новую строку из строки?
Я хочу, чтобы убедиться, что _content не заканчивается символом новой строки:
_content = sb.ToString().Trim(new char[] { Environment.NewLine });
но выше код не работает поскольку Trim, похоже, не имеет перегруженного параметра для коллекции строк, только символы.
что самое простое ОДН-вкладыш для того чтобы извлечь Enivronment.Новая строка с конца строки?
10 ответов:
следующие работы для меня.
sb.ToString().TrimEnd( '\r', '\n' );или
sb.ToString().TrimEnd( Environment.NewLine.ToCharArray());
как насчет:
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.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