Aggiunta di una nuova riga in una stringa in C #


230

Ho una corda

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

Ho bisogno di aggiungere una nuova riga dopo ogni occorrenza del simbolo "@" nella stringa.

La mia uscita dovrebbe essere così

fkdfdsfdflkdkfk@
dfsdfjk72388389@
kdkfkdfkkl@
jkdjkfjd@
jjjk@

2
cosa intendi con "la nuova riga non è efficace nel file di testo"? Come stai scrivendo nel file di testo?
Mark Cidade,

5
Pubblica il codice che usi per scrivere il file. \ r \ n (windows - Environment.Newline) o \ n (Unix) dovrebbe funzionare ...
Gishu,

Risposte:


482

Utilizzare Environment.NewLinequando vuoi in qualsiasi stringa. Un esempio:

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

text = text.Replace("@", "@" + System.Environment.NewLine);

1
Ma devo scrivere queste informazioni in un file di testo come questo fkdfdsfdflkdkfk @ dfsdfjk72388389 @ kdkfkdfkkl @ jkdjkfjd @ jjjk @ Il carattere di nuova riga non è efficace nel file di testo.
balaweblog,

Questa non è una buona soluzione, poiché System.String (alias string) è un oggetto immutabile, il che significa che l'intera stringa viene copiata. Meglio usare un oggetto System.Text.StringBuilder per operazioni come String.Replace.
ワ イ き ん ぐ

@Alexander Direi che l'operatività delle stringhe è inefficiente è un problema di cui non dobbiamo più preoccuparci nel 2019.
Filipe Madureira,

2
@FilipeMadureira che è così sbagliato in così tanti modi. Miglioramenti hardware o no, non c'è mai una scusa per essere un cattivo programmatore di proposito. Se sappiamo come farlo meglio dovremmo. Oltre a immaginare di implementarlo in una libreria che viene utilizzata in una funzionalità di base in un sistema di database, vorresti prestazioni elevate.
ワ イ き ん ぐ

@Alexander Essere un buon programmatore è un lusso che solo le persone che non hanno scadenze / cattivi lavori / capi possono avere, altrimenti sarei d'accordo con te. All'inizio ho pensato che il mio punto fosse chiaro.
Filipe Madureira,

70

Puoi aggiungere un nuovo carattere di linea dopo il simbolo @ in questo modo:

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

Puoi anche usare la NewLineproprietà nella Environmentclasse (penso che sia l'ambiente).


1
Ma devo scrivere queste informazioni in un file di testo come questo fkdfdsfdflkdkfk @ dfsdfjk72388389 @ kdkfkdfkkl @ jkdjkfjd @ jjjk @ Il carattere di nuova riga non è efficace nel file di testo.
balaweblog,

18

Le risposte precedenti si avvicinano, ma per soddisfare il requisito effettivo che il @simbolo rimanga vicino, vorresti che fosse str.Replace("@", "@" + System.Environment.NewLine). Ciò manterrà il @simbolo e aggiungerà i caratteri di nuova riga appropriati per la piattaforma corrente.


9

Quindi modifica le risposte precedenti a:

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

Se non si desidera le nuove righe nel file di testo, non conservarle.


6

Una semplice sostituzione di stringa farà il lavoro. Dai un'occhiata al programma di esempio qui sotto:

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

6

come altri hanno già detto, il nuovo carattere di riga ti darà una nuova riga in un file di testo in Windows. prova quanto segue:

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

Ho visto solo il tuo ambiente.newline == \ r \ n = true ora (forse l'ho perso perché non è la sintassi C #;)). Inoltre, maggiori informazioni qui msdn.microsoft.com/de-de/library/… . Mi sono appena imbattuto in un problema simile con l'uso di hardcoded \ n non dandomi una nuova riga in Windows ..
Andreas Reiff

3

In base alle tue risposte a tutti gli altri, qualcosa del genere è ciò che stai cercando.

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 + "@");
    }
}

2
string str = "fkdfdsfdflkdkfk@dfsdfjk72388389@kdkfkdfkkl@jkdjkfjd@jjjk@";
str = str.Replace("@", Environment.NewLine);
richTextBox1.Text = str;

2
string strToProcess = "fkdfdsfdflkdkfk@dfsdfjk72388389@kdkfkdfkkl@jkdjkfjd@jjjk@";
var result = strToProcess.Replace("@", "@ \r\n");
Console.WriteLine(result);

Produzione


2
Mentre questo codice può rispondere alla domanda, fornendo un contesto aggiuntivo riguardo al perché e / o al modo in cui questo codice risponde alla domanda migliora il suo valore a lungo termine.
Thomas Flinkow,

0

Puoi anche usare string[] something = text.Split('@'). Assicurati di utilizzare virgolette singole per racchiudere "@" per memorizzarlo come un chartipo. Ciò memorizzerà i caratteri fino a e includendo ogni "@" come singole parole nella matrice. È quindi possibile generare ciascuno ( element + System.Environment.NewLine) usando un ciclo for o scriverlo in un file di testo usando System.IO.File.WriteAllLines([file path + name and extension], [array name]). Se il file specificato non esiste in quella posizione verrà automaticamente creato.


0
protected void Button1_Click(object sender, EventArgs e)
{
    string str = "fkdfdsfdflkdkfk@dfsdfjk72388389@kdkfkdfkkl@jkdjkfjd@jjjk@";
    str = str.Replace("@", "@" + "<br/>");
    Response.Write(str);       
}

1
Benvenuti nella comunità SO. Grazie per aver risposto alla domanda. Tuttavia è buona norma aggiungere alcune spiegazioni sul perché funzioni.
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);
    }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.