629 Stimmen

Ersetzen von Zeilenumbrüchen in einer Zeichenfolge C#

Wie kann ich Zeilenumbrüche innerhalb einer Zeichenfolge in C# ersetzen?

19voto

driis Punkte 156110

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 .

19voto

ewwink Punkte 17016

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
  }
}

17voto

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.

16voto

tvanfosson Punkte 506878

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 );
   }
}

8voto

RAY Punkte 2049

Warum nicht beides?

string ReplacementString = "";

Regex.Replace(strin.Replace(System.Environment.NewLine, ReplacementString), @"(\r\n?|\n)", ReplacementString);

Anmerkung: Ersetzen Sie strin mit dem Namen Ihrer Eingabezeichenfolge.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X