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