Adicionando uma nova linha em uma string em C #

230

Eu tenho uma corda.

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

Eu preciso adicionar uma nova linha após cada ocorrência do símbolo "@" na seqüência de caracteres.

Minha saída deve ser assim

fkdfdsfdflkdkfk@
dfsdfjk72388389@
kdkfkdfkkl@
jkdjkfjd@
jjjk@
balaweblog
fonte
2
o que você quer dizer com "a nova linha não é eficaz no arquivo de texto"? Como você está escrevendo no arquivo de texto?
Mark Cidade
5
Poste o código que você usa para gravar o arquivo. \ r \ n (windows - Environment.Newline) ou \ n (Unix) deve funcionar ...
Gishu 22/10/2008

Respostas:

482

Use Environment.NewLinesempre que quiser em qualquer string. Um exemplo:

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

text = text.Replace("@", "@" + System.Environment.NewLine);
CMS
fonte
1
Mas preciso escrever essas informações em um arquivo de texto como este fkdfdsfdflkdkfk @ dfsdfjk72388389 @ kdkfkdfkkl @ jkdjkfjd @ jjjk @ O caractere de nova linha não é eficaz no arquivo de texto.
balaweblog
Essa não é uma boa solução, pois System.String (alias string) é um objeto imutável, o que significa que toda a cadeia está sendo copiada. Melhor usar um objeto System.Text.StringBuilder para operações como String.Replace.
21719 Fase
@Alexander, eu diria que as operações de cadeia de caracteres são ineficientes é um problema que não precisamos mais nos preocupar em 2019.
Filipe Madureira
2
@FilipeMadureira que está tão errado de tantas maneiras. Melhorias de hardware ou não, nunca há uma desculpa para ser um programador ruim de propósito. Se soubermos fazer melhor, deveríamos. Além de imaginar implementá-lo em uma biblioteca que está sendo usada em um recurso principal em um sistema de banco de dados - você desejaria alto desempenho.
ワイきんぐ
@Alexander Ser um bom programador é um luxo que somente pessoas que não têm prazos / empregos ruins / chefes podem ter, caso contrário, eu concordo com você. Eu pensei que meu argumento estava claro no começo.
Filipe Madureira
70

Você pode adicionar um novo caractere de linha após o símbolo @ da seguinte maneira:

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

Você também pode usar a NewLinepropriedade na Environmentclasse (acho que é ambiente).

Jason
fonte
1
Mas preciso escrever essas informações em um arquivo de texto como este fkdfdsfdflkdkfk @ dfsdfjk72388389 @ kdkfkdfkkl @ jkdjkfjd @ jjjk @ O caractere de nova linha não é eficaz no arquivo de texto.
balaweblog
18

As respostas anteriores chegam perto, mas para atender ao requisito real de que o @símbolo permaneça próximo, você deseja que seja str.Replace("@", "@" + System.Environment.NewLine). Isso manterá o @símbolo e adicionará os caracteres de nova linha apropriados para a plataforma atual.

Marcus Griep
fonte
9

Em seguida, modifique as respostas anteriores para:

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

Se você não deseja as novas linhas no arquivo de texto, não as preserve.

Benjamin Autin
fonte
6

Uma simples substituição de string fará o trabalho. Dê uma olhada no programa de exemplo abaixo:

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
fonte
6

como outros já disseram, nova linha char lhe dará uma nova linha em um arquivo de texto no Windows. tente o seguinte:

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);
        }
    }
}
Tem
fonte
Só vi seu ambiente.newline == \ r \ n = true agora (talvez eu tenha perdido isso porque não é a sintaxe do C #;)). Além disso, mais informações aqui msdn.microsoft.com/de-de/library/… . Só tropeçou em um problema semelhante com o uso codificado \ n não me dando uma nova linha no Windows ..
Andreas Reiff
3

Com base nas suas respostas para todos os outros, é algo que você está procurando.

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

Resultado

Kathiravan C
fonte
2
Embora esse código possa responder à pergunta, fornecer um contexto adicional a respeito de por que e / ou como esse código responde à pergunta melhora seu valor a longo prazo.
Thomas Flinkow
0

Você também pode usar string[] something = text.Split('@'). Certifique-se de usar aspas simples para colocar o "@" para armazená-lo como um chartipo. Isso armazenará os caracteres até e incluindo cada "@" como palavras individuais na matriz. Você pode então imprimir cada ( element + System.Environment.NewLine) usando um loop for ou gravá-lo em um arquivo de texto usando System.IO.File.WriteAllLines([file path + name and extension], [array name]). Se o arquivo especificado não existir nesse local, ele será criado automaticamente.

TehSpowage
fonte
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
fonte
1
Bem-vindo à comunidade SO. Obrigado por responder a pergunta. No entanto, é uma boa prática adicionar algumas explicações sobre por que isso funciona.
Phusi #
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
fonte