Ajout d'une nouvelle ligne dans une chaîne en C #

230

J'ai une chaîne.

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

J'ai besoin d'ajouter une nouvelle ligne après chaque occurrence du symbole "@" dans la chaîne.

Ma sortie devrait être comme ça

fkdfdsfdflkdkfk@
dfsdfjk72388389@
kdkfkdfkkl@
jkdjkfjd@
jjjk@
balaweblog
la source
2
que voulez-vous dire par "la nouvelle ligne n'est pas efficace dans le fichier texte"? Comment écrivez-vous dans le fichier texte?
Mark Cidade
5
Publiez le code que vous utilisez pour écrire le fichier. \ r \ n (windows - Environment.Newline) ou \ n (Unix) devrait fonctionner ...
Gishu

Réponses:

482

Utilisez Environment.NewLinequand vous voulez dans n'importe quelle chaîne. Un exemple:

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

text = text.Replace("@", "@" + System.Environment.NewLine);
CMS
la source
1
Mais j'ai besoin d'écrire ces informations dans un fichier texte comme celui-ci fkdfdsfdflkdkfk @ dfsdfjk72388389 @ kdkfkdfkkl @ jkdjkfjd @ jjjk @ Le nouveau caractère de ligne n'est pas efficace dans le fichier texte.
balaweblog
Ce n'est pas une bonne solution, car System.String (alias string) est un objet immuable, ce qui signifie que la chaîne entière est copiée. Mieux vaut utiliser un objet System.Text.StringBuilder pour des opérations telles que String.Replace.
ワ イ き ん ぐ
@Alexander Je dirais que les opérations de chaîne inefficaces sont un problème que nous ne devons plus nous inquiéter en 2019.
Filipe Madureira
2
@FilipeMadureira qui a tellement tort à bien des égards. Améliorations matérielles ou non, il n'y a jamais d'excuse pour être un mauvais programmeur exprès. Si nous savons comment le faire mieux, nous devrions le faire. En plus d'imaginer l'implémentation de cela dans une bibliothèque qui est utilisée dans une fonctionnalité principale d'un système de base de données - vous voudriez des performances élevées.
ワ イ き ん ぐ
@Alexander Être un bon programmeur est un luxe que seules les personnes qui n'ont pas de délais / de mauvais emplois / patrons peuvent avoir, sinon, je serais d'accord avec vous. Je pensais que mon point était clair au début.
Filipe Madureira
70

Vous pouvez ajouter un nouveau caractère de ligne après le symbole @ comme ceci:

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

Vous pouvez également utiliser la NewLinepropriété dans la Environmentclasse (je pense que c'est l'environnement).

Jason
la source
1
Mais j'ai besoin d'écrire ces informations dans un fichier texte comme celui-ci fkdfdsfdflkdkfk @ dfsdfjk72388389 @ kdkfkdfkkl @ jkdjkfjd @ jjjk @ Le nouveau caractère de ligne n'est pas efficace dans le fichier texte.
balaweblog
18

Les réponses précédentes se rapprochent, mais pour répondre à l'exigence réelle que le @symbole reste proche, vous voudriez que ce soit le cas str.Replace("@", "@" + System.Environment.NewLine). Cela gardera le @symbole et ajoutera les caractères de nouvelle ligne appropriés pour la plate-forme actuelle.

Marcus Griep
la source
9

Ensuite, modifiez simplement les réponses précédentes pour:

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

Si vous ne voulez pas les retours à la ligne dans le fichier texte, ne le conservez pas.

Benjamin Autin
la source
6

Un simple remplacement de chaîne fera l'affaire. Jetez un œil à l'exemple de programme ci-dessous:

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
la source
6

comme d'autres l'ont dit, le nouveau caractère de ligne vous donnera une nouvelle ligne dans un fichier texte dans Windows. essayez ce qui suit:

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
la source
Je n'ai vu que votre environnement.newline == \ r \ n = vrai maintenant (peut-être que je l'ai manqué parce que ce n'est pas la syntaxe C #;)). En outre, plus d'informations ici msdn.microsoft.com/de-de/library/… . Je suis juste tombé sur un problème similaire avec l'utilisation du code dur \ n ne me donnant pas une nouvelle ligne dans les fenêtres ..
Andreas Reiff
3

Sur la base de vos réponses à tout le monde, quelque chose comme ça est ce que vous recherchez.

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
la source
2
string str = "fkdfdsfdflkdkfk@dfsdfjk72388389@kdkfkdfkkl@jkdjkfjd@jjjk@";
str = str.Replace("@", Environment.NewLine);
richTextBox1.Text = str;
Glinas
la source
2
string strToProcess = "fkdfdsfdflkdkfk@dfsdfjk72388389@kdkfkdfkkl@jkdjkfjd@jjjk@";
var result = strToProcess.Replace("@", "@ \r\n");
Console.WriteLine(result);

Production

Kathiravan C
la source
2
Bien que ce code puisse répondre à la question, fournir un contexte supplémentaire concernant pourquoi et / ou comment ce code répond à la question améliore sa valeur à long terme.
Thomas Flinkow
0

Vous pouvez également utiliser string[] something = text.Split('@'). Assurez-vous d'utiliser des guillemets simples pour entourer le "@" pour le stocker en tant que chartype. Cela stockera les caractères jusqu'à et y compris chaque "@" en tant que mots individuels dans le tableau. Vous pouvez ensuite sortir each ( element + System.Environment.NewLine) à l'aide d'une boucle for ou l'écrire dans un fichier texte à l'aide de System.IO.File.WriteAllLines([file path + name and extension], [array name]). Si le fichier spécifié n'existe pas à cet emplacement, il sera automatiquement créé.

TehSpowage
la source
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
la source
1
Bienvenue dans la communauté SO. Merci d'avoir répondu à la question. Cependant, il est recommandé d'ajouter des explications sur la raison pour laquelle cela fonctionne.
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
la source