it-swarm.com.de

Zeilenumbrüche in einer Zeichenfolge ersetzen C #

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

472
YonahW

Benutze replace mit Environment.NewLine

myString = myString.Replace(System.Environment.NewLine, "replacement text")

Wie in anderen Beiträgen erwähnt, müssen Sie, wenn die Zeichenfolge aus einer anderen Umgebung (OS) stammt, die Implementierung von neue Zeilensteuerzeichen in dieser bestimmten Umgebung ersetzen.

676
Corin Blaikie

Die bisher veröffentlichten Lösungen ersetzen entweder nur Environment.NewLine oder schlagen fehl, wenn die Ersatzzeichenfolge Zeilenumbrüche enthält, da sie string.Replace mehrmals aufrufen.

Hier ist eine Lösung, die einen regulären Ausdruck verwendet, um alle drei Ersetzungen in nur einem Durchgang über die Zeichenfolge vorzunehmen. Dies bedeutet, dass die Ersatzzeichenfolge sicher Zeilenumbrüche enthalten kann.

string result = Regex.Replace(input, @"\r\n?|\n", replacementString);
404
Mark Byers

Um die Antwort von The.Anyi.9 zu erweitern, sollten Sie auch das verschiedene Arten von Zeilenumbrüchen im allgemeinen Gebrauch kennen. Abhängig davon, woher Ihre Datei stammt, sollten Sie prüfen, ob Sie alle Alternativen finden ...

string replaceWith = "";
string removedBreaks = Line.Replace("\r\n", replaceWith).Replace("\n", replaceWith).Replace("\r", replaceWith);

sollte dich zum Laufen bringen ...

170
ZombieSheep

Ich würde Environment.Newline verwenden, wenn ich eine neue Zeile für eine Zeichenfolge einfügen, aber nicht alle neuen Zeilen aus einer Zeichenfolge entfernen möchte.

Abhängig von Ihrer Plattform können Sie unterschiedliche Arten von Zeilenumbrüchen verwenden, aber auch innerhalb derselben Plattform werden häufig unterschiedliche Arten von Zeilenumbrüchen verwendet. Insbesondere beim Umgang mit Dateiformaten und Protokollen.

string ReplaceNewlines(string blockOfText, string replaceWith)
{
    return blockOfText.Replace("\r\n", replaceWith).Replace("\n", replaceWith).Replace("\r", replaceWith);
}
35
Brian R. Bondy

Wenn Ihr Code in verschiedenen Umgebungen ausgeführt werden soll, würde ich die Verwendung der Environment.NewLine -Konstante in Betracht ziehen, da dies speziell die newline ist, die in der jeweiligen Umgebung verwendet wird.

line = line.Replace(Environment.NewLine, "newLineReplacement");

Wenn Sie jedoch den Text aus einer Datei erhalten, die von einem anderen System stammt, ist dies möglicherweise nicht die richtige Antwort. Sie sollten ihn durch die Newline-Konstante ersetzen, die auf dem anderen System verwendet wird. Es wird typischerweise \n oder \r\n sein.

18
driis

Vergessen Sie nicht, dass durch Ersetzen nicht die Zeichenfolge ersetzt wird, sondern eine neue Zeichenfolge mit den ersetzten Zeichen zurückgegeben wird. Das Folgende entfernt Zeilenumbrüche (ersetzt sie nicht). Ich würde @Brian R. Bondys Methode verwenden, wenn ich sie durch etwas anderes ersetze, vielleicht als Erweiterungsmethode verpackt. Denken Sie daran, zuerst nach Nullwerten zu suchen, bevor Sie Replace oder die angegebenen 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 );
   }
}
14
tvanfosson

Um sicherzustellen, dass alle möglichen Arten von Zeilenumbrüchen (Windows, Mac und Unix) ersetzt werden, sollten Sie Folgendes verwenden:

string.Replace("\r\n", "\n").Replace('\r', '\n').Replace('\n', 'replacement');

und in dieser Reihenfolge, um keine zusätzlichen Zeilenumbrüche zu machen, wenn Sie eine Kombination von Zeilenendezeichen finden.

9

Warum nicht beide?

string ReplacementString = "";

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

Hinweis: Ersetzen Sie strin durch den Namen Ihrer Eingabezeichenfolge.

6
RAY

Ich musste den \r\n durch einen tatsächlichen Wagenrücklauf und Zeilenvorschub ersetzen und \t durch einen tatsächlichen Tabulator ersetzen. Also habe ich mir folgendes ausgedacht:

public string Transform(string data)
{
    string result = data;
    char cr = (char)13;
    char lf = (char)10;
    char tab = (char)9;

    result = result.Replace("\\r", cr.ToString());
    result = result.Replace("\\n", lf.ToString());
    result = result.Replace("\\t", tab.ToString());

    return result;
}
6
Zamir

wenn Sie die neuen Zeilen "bereinigen" möchten, ist ein Flammen-Baud-Kommentar mit Regex @"[\r\n]+" 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
  }
}
4
ewwink
var answer = Regex.Replace(value, "(\n|\r)+", replacementString);
4
Matt Hinze

Der beste Weg, um Zeilenumbrüche sicher zu ersetzen, ist

yourString.Replace("\r\n","\n") //handling windows linebreaks
.Replace("\r","\n")             //handling mac linebreaks

das sollte einen String mit nur\n (zB Zeilenumbruch) als Zeilenumbruch erzeugen. Dieser Code ist nützlich, um auch gemischte Zeilenumbrüche zu korrigieren.

2
data

Da eine neue Zeile durch \n, \r und \r\n begrenzt werden kann, ersetzen wir zuerst \r und \r\n durch \n und nur Dann teilen Sie den Datenstring.

Die folgenden Zeilen sollten zur parseCSV -Methode wechseln:

function parseCSV(data) {
    //alert(data);
    //replace UNIX new lines
    data = data.replace(/\r\n/g, "\n");
    //replace MAC new lines
    data = data.replace(/\r/g, "\n");
    //split into rows
    var rows = data.split("\n");
}
2
Amrik

Verwenden Sie die .Replace () -Methode

Line.Replace("\n", "whatever you want to replace with");
2
The.Anti.9

Eine andere Möglichkeit besteht darin, ein StringReader über der fraglichen Zeichenfolge zu erstellen. Führen Sie auf dem Reader .ReadLine() in einer Schleife aus. Dann haben Sie die Zeilen getrennt, egal welche (konsistenten oder inkonsistenten) Trennzeichen sie hatten. Damit können Sie fortfahren, wie Sie möchten; Eine Möglichkeit besteht darin, ein StringBuilder zu verwenden und .AppendLine aufzurufen.

Der Vorteil ist, dass Sie das Framework entscheiden lassen, was einen "Zeilenumbruch" ausmacht.

0

Wenn Sie nur die Zeilenumbrüche ersetzen möchten:

var input = @"sdfhlu \r\n sdkuidfs\r\ndfgdgfd";
var match = @"[\\ ]+";
var replaceWith = " ";
Console.WriteLine("input: " + input);
var x = Regex.Replace(input.Replace(@"\n", replaceWith).Replace(@"\r", replaceWith), match, replaceWith);
Console.WriteLine("output: " + x);

Wenn Sie Zeilenumbrüche, Tabulatoren und Leerzeichen ersetzen möchten:

var input = @"sdfhlusdkuidfs\r\ndfgdgfd";
var match = @"[\\s]+";
var replaceWith = "";
Console.WriteLine("input: " + input);
var x = Regex.Replace(input, match, replaceWith);
Console.WriteLine("output: " + x);
0
Tadej
string s = Regex.Replace(source_string, "\n", "\r\n");

oder

string s = Regex.Replace(source_string, "\r\n", "\n");

je nachdem welchen weg du gehen willst.

Hoffe es hilft.

0
user181261