Wie kann ich Zeilenumbrüche innerhalb einer Zeichenfolge in C# ersetzen?
Antworten
Zu viele Anzeigen?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
}
}
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 );
}
}
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.
Neue Methode in .NET 6 verwenden
myString = myString.ReplaceLineEndings();
Ersetzt ALLE Zeilenumbrüche in der aktuellen Zeichenkette.
Dokumentation: ReplaceLineEndings