Hinzufügen einer neuen Zeile zu einer Zeichenfolge in C #

230

Ich habe eine Schnur.

string strToProcess = "fkdfdsfdflkdkfk@dfsdfjk72388389@kdkfkdfkkl@jkdjkfjd@jjjk@";

Ich muss nach jedem Auftreten des Symbols "@" in der Zeichenfolge eine neue Zeile hinzufügen.

Mein Output sollte so sein

fkdfdsfdflkdkfk@
dfsdfjk72388389@
kdkfkdfkkl@
jkdjkfjd@
jjjk@
balaweblog
quelle
2
Was meinst du mit "Der Zeilenumbruch ist in der Textdatei nicht wirksam"? Wie schreibst du in die Textdatei?
Mark Cidade
5
Veröffentlichen Sie den Code, mit dem Sie die Datei ausschreiben. \ r \ n (Windows - Environment.Newline) oder \ n (Unix) sollten funktionieren ...
Gishu

Antworten:

482

Verwenden Environment.NewLineSie, wann immer Sie möchten, in einer beliebigen Zeichenfolge. Ein Beispiel:

string text = "fkdfdsfdflkdkfk@dfsdfjk72388389@kdkfkdfkkl@jkdjkfjd@jjjk@";

text = text.Replace("@", "@" + System.Environment.NewLine);
CMS
quelle
1
Aber ich muss diese Informationen in eine Textdatei wie diese schreiben. Fkdfdsfdflkdkfk @ dfsdfjk72388389 @ kdkfkdfkkl @ jkdjkfjd @ jjjk @ Das neue Zeilenzeichen ist in der Textdatei nicht wirksam.
Balaweblog
Dies ist keine gute Lösung, da System.String (Alias string) ein unveränderliches Objekt ist, was bedeutet, dass die gesamte Zeichenfolge kopiert wird. Verwenden Sie besser ein System.Text.StringBuilder-Objekt für Vorgänge wie String.Replace.
イ き ん.
@ Alexander Ich würde sagen, dass ineffiziente String-Operationen ein Problem sind, über das wir uns 2019 keine Sorgen mehr machen müssen.
Filipe Madureira
2
@FilipeMadureira das ist in vielerlei Hinsicht so falsch. Hardware-Verbesserungen oder nicht, es gibt nie eine Entschuldigung dafür, absichtlich ein schlechter Programmierer zu sein. Wenn wir wissen, wie wir es besser machen können, sollten wir es tun. Stellen Sie sich außerdem vor, Sie implementieren dies in einer Bibliothek, die in einer Kernfunktion eines Datenbanksystems verwendet wird - Sie möchten eine hohe Leistung.
イ き ん ぐ
@Alexander Ein guter Programmierer zu sein ist ein Luxus, den nur Leute haben können, die keine Fristen / schlechten Jobs / Chefs haben, sonst würde ich Ihnen zustimmen. Ich dachte, mein Standpunkt war zuerst klar.
Filipe Madureira
70

Sie können nach dem @ -Symbol wie folgt ein neues Zeilenzeichen hinzufügen:

string newString = oldString.Replace("@", "@\n");  

Sie können die NewLineEigenschaft auch in der EnvironmentKlasse verwenden (ich denke, es ist Umgebung).

Jason
quelle
1
Aber ich muss diese Informationen in eine Textdatei wie diese schreiben. Fkdfdsfdflkdkfk @ dfsdfjk72388389 @ kdkfkdfkkl @ jkdjkfjd @ jjjk @ Das neue Zeilenzeichen ist in der Textdatei nicht wirksam.
Balaweblog
18

Die vorherigen Antworten kommen nahe, aber um die tatsächliche Anforderung zu erfüllen, dass das @Symbol nahe bleibt, möchten Sie, dass dies so ist str.Replace("@", "@" + System.Environment.NewLine). @Dadurch bleibt das Symbol erhalten und die entsprechenden Zeilenumbrüche für die aktuelle Plattform werden hinzugefügt.

Marcus Griep
quelle
9

Dann ändern Sie einfach die vorherigen Antworten zu:

Console.Write(strToProcess.Replace("@", "@" + Environment.NewLine));

Wenn Sie die Zeilenumbrüche nicht in der Textdatei haben möchten, behalten Sie sie nicht bei.

Benjamin Autin
quelle
6

Ein einfaches Ersetzen der Zeichenfolge erledigt den Job. Schauen Sie sich das folgende Beispielprogramm an:

using System;

namespace NewLineThingy
{
    class Program
    {
        static void Main(string[] args)
        {
            string str = "fkdfdsfdflkdkfk@dfsdfjk72388389@kdkfkdfkkl@jkdjkfjd@jjjk@";
            str = str.Replace("@", "@" + Environment.NewLine);
            Console.WriteLine(str);
            Console.ReadKey();
        }
    }
}
Jason Jackson
quelle
6

Wie andere gesagt haben, gibt Ihnen new line char eine neue Zeile in einer Textdatei in Windows. Versuche Folgendes:

using System;
using System.IO;

static class Program
{
    static void Main()
    {
        WriteToFile
        (
        @"C:\test.txt",
        "fkdfdsfdflkdkfk@dfsdfjk72388389@kdkfkdfkkl@jkdjkfjd@jjjk@",
        "@"
        );

        /*
        output in test.txt in windows =
        fkdfdsfdflkdkfk@
        dfsdfjk72388389@
        kdkfkdfkkl@
        jkdjkfjd@
        jjjk@ 
        */
    }

    public static void WriteToFile(string filename, string text, string newLineDelim)
    {
        bool equal = Environment.NewLine == "\r\n";

        //Environment.NewLine == \r\n = True
        Console.WriteLine("Environment.NewLine == \\r\\n = {0}", equal);

        //replace newLineDelim with newLineDelim + a new line
        //trim to get rid of any new lines chars at the end of the file
        string filetext = text.Replace(newLineDelim, newLineDelim + Environment.NewLine).Trim();

        using (StreamWriter sw = new StreamWriter(File.OpenWrite(filename)))
        {
            sw.Write(filetext);
        }
    }
}
Hath
quelle
Habe jetzt nur deine Umgebung gesehen.newline == \ r \ n = true (vielleicht habe ich es verpasst, weil es keine C # -Syntax ist;)). Weitere Informationen finden Sie hier msdn.microsoft.com/de-de/library/… . Ich bin gerade auf ein ähnliches Problem mit der Verwendung von Hardcoded gestoßen \ n, das mir keine neue Zeile in Windows gibt.
Andreas Reiff
3

Basierend auf Ihren Antworten an alle anderen ist so etwas genau das, wonach Sie suchen.

string file = @"C:\file.txt";
string strToProcess = "fkdfdsfdflkdkfk@dfsdfjk72388389@kdkfkdfkkl@jkdjkfjd@jjjk@";
string[] lines = strToProcess.Split(new char[] { '@' }, StringSplitOptions.RemoveEmptyEntries);

using (StreamWriter writer = new StreamWriter(file))
{
    foreach (string line in lines)
    {
        writer.WriteLine(line + "@");
    }
}
Timothy Carter
quelle
2
string str = "fkdfdsfdflkdkfk@dfsdfjk72388389@kdkfkdfkkl@jkdjkfjd@jjjk@";
str = str.Replace("@", Environment.NewLine);
richTextBox1.Text = str;
Glinas
quelle
2
string strToProcess = "fkdfdsfdflkdkfk@dfsdfjk72388389@kdkfkdfkkl@jkdjkfjd@jjjk@";
var result = strToProcess.Replace("@", "@ \r\n");
Console.WriteLine(result);

Ausgabe

Kathiravan C.
quelle
2
Während dieser Code die Frage möglicherweise beantwortet, verbessert die Bereitstellung eines zusätzlichen Kontexts darüber, warum und / oder wie dieser Code die Frage beantwortet, ihren langfristigen Wert.
Thomas Flinkow
0

Sie könnten auch verwenden string[] something = text.Split('@'). Stellen Sie sicher, dass Sie das "@" in einfache Anführungszeichen setzen, um es als charTyp zu speichern . Dadurch werden die Zeichen bis einschließlich jedes "@" als einzelne Wörter im Array gespeichert. Sie können dann jedes ( element + System.Environment.NewLine) mit einer for-Schleife ausgeben oder mit in eine Textdatei schreiben System.IO.File.WriteAllLines([file path + name and extension], [array name]). Wenn die angegebene Datei an diesem Speicherort nicht vorhanden ist, wird sie automatisch erstellt.

Die Kraft
quelle
0
protected void Button1_Click(object sender, EventArgs e)
{
    string str = "fkdfdsfdflkdkfk@dfsdfjk72388389@kdkfkdfkkl@jkdjkfjd@jjjk@";
    str = str.Replace("@", "@" + "<br/>");
    Response.Write(str);       
}
Papun Sahoo
quelle
1
Willkommen in der SO-Community. Vielen Dank für die Beantwortung der Frage. Es wird jedoch empfohlen, einige Erklärungen hinzuzufügen, warum dies funktioniert.
Phuzi
0
using System;
using System.IO;
using System.Text;

class Test
{
    public static void Main()
    {
             string strToProcess = "fkdfdsfdflkdkfk@dfsdfjk72388389@kdkfkdfkkl@jkdjkfjd@jjjk@";
            strToProcess.Replace("@", Environment.NewLine);
            Console.WriteLine(strToProcess);
    }
}
FAREH
quelle