Wie kann ich Zeilenumbrüche innerhalb einer Zeichenfolge in C# ersetzen?
Antworten
Zu viele Anzeigen?Wenn Ihr Code in verschiedenen Umgebungen laufen soll, würde ich die Verwendung der Environment.NewLine
Konstante, da es sich speziell um die newline
in der jeweiligen Umgebung verwendet werden.
line = line.Replace(Environment.NewLine, "newLineReplacement");
Wenn Sie den Text jedoch aus einer Datei beziehen, die von einem anderen System stammt, ist dies möglicherweise nicht die richtige Antwort, und Sie sollten ihn durch die auf dem anderen System verwendete Zeilenumbruchkonstante ersetzen. Normalerweise ist das \n
o \r\n
.
Wenn Sie die neuen Zeilen "säubern" wollen, verwenden Sie den Flamebaud-Kommentar mit Regex @"[\r\n]+"
ist die beste Wahl.
using System;
using System.Text.RegularExpressions;
class MainClass {
public static void Main (string[] args) {
string str = "AAA\r\nBBB\r\n\r\n\r\nCCC\r\r\rDDD\n\n\nEEE";
Console.WriteLine (str.Replace(System.Environment.NewLine, "-"));
/* Result:
AAA
-BBB
-
-
-CCC
DDD---EEE
*/
Console.WriteLine (Regex.Replace(str, @"\r\n?|\n", "-"));
// Result:
// AAA-BBB---CCC---DDD---EEE
Console.WriteLine (Regex.Replace(str, @"[\r\n]+", "-"));
// Result:
// AAA-BBB-CCC-DDD-EEE
}
}
Um sicherzustellen, dass alle möglichen Arten von Zeilenumbrüchen (Windows, Mac und Unix) ersetzt werden, sollten Sie verwenden:
string.Replace("\r\n", "\n").Replace('\r', '\n').Replace('\n', 'replacement');
und in dieser Reihenfolge, um keine zusätzlichen Zeilenumbrüche zu erzeugen, wenn Sie eine Kombination von Zeilenendzeichen finden.
Vergessen Sie nicht, dass replace nicht die Ersetzung in der Zeichenfolge vornimmt, sondern eine neue Zeichenfolge mit den ersetzten Zeichen zurückgibt. Die folgende Methode entfernt Zeilenumbrüche (ersetzt sie nicht). Ich würde die Methode von @Brian R. Bondy verwenden, wenn ich sie durch etwas anderes ersetzen möchte, vielleicht als eine Erweiterungsmethode verpackt. Denken Sie daran, zuerst auf Nullwerte zu prüfen, bevor Sie Replace oder die angebotenen Erweiterungsmethoden aufrufen.
string line = ...
line = line.Replace( "\r", "").Replace( "\n", "" );
Als Erweiterungsmethoden:
public static class StringExtensions
{
public static string RemoveLineBreaks( this string lines )
{
return lines.Replace( "\r", "").Replace( "\n", "" );
}
public static string ReplaceLineBreaks( this string lines, string replacement )
{
return lines.Replace( "\r\n", replacement )
.Replace( "\r", replacement )
.Replace( "\n", replacement );
}
}