596 Stimmen

Ersetzen von Zeilenumbrüchen in einer Zeichenfolge C#

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

18voto

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

15voto

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

15voto

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.

11voto

Boris Dligach Punkte 21

Neue Methode in .NET 6 verwenden

myString = myString.ReplaceLineEndings();

Ersetzt ALLE Zeilenumbrüche in der aktuellen Zeichenkette.

Dokumentation: ReplaceLineEndings

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