Agregar una nueva línea en una cadena en C #

230

Tengo una cuerda

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

Necesito agregar una nueva línea después de cada aparición del símbolo "@" en la cadena.

Mi salida debería ser así

fkdfdsfdflkdkfk@
dfsdfjk72388389@
kdkfkdfkkl@
jkdjkfjd@
jjjk@
balaweblog
fuente
2
¿Qué quiere decir con "la nueva línea no es efectiva en el archivo de texto"? ¿Cómo estás escribiendo en el archivo de texto?
Mark Cidade
55
Publique el código que usa para escribir el archivo. \ r \ n (windows - Environment.Newline) o \ n (Unix) deberían funcionar ...
Gishu

Respuestas:

482

Úselo Environment.NewLinecuando lo desee en cualquier cadena. Un ejemplo:

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

text = text.Replace("@", "@" + System.Environment.NewLine);
CMS
fuente
1
Pero necesito escribir esta información en un archivo de texto como este fkdfdsfdflkdkfk @ dfsdfjk72388389 @ kdkfkdfkkl @ jkdjkfjd @ jjjk @ El nuevo carácter de línea no es efectivo en el archivo de texto.
balaweblog
Esta no es una buena solución, ya que System.String (alias string) es un objeto inmutable, lo que significa que se está copiando toda la cadena. Es mejor usar un objeto System.Text.StringBuilder para operaciones como String.Replace.
ワ イ き ん ぐ
@Alexander, diría que las operaciones de cadena que son ineficientes es un problema que ya no tenemos que preocuparnos en 2019.
Filipe Madureira,
2
@FilipeMadureira que está tan mal en muchos sentidos. Mejoras de hardware o no, nunca hay una excusa para ser un mal programador a propósito. Si sabemos cómo hacerlo mejor, deberíamos hacerlo. Además, imagine implementar esto en una biblioteca que se está utilizando en una función central en un sistema de base de datos: desearía un alto rendimiento.
ワ イ き ん ぐ
@Alexander Ser un buen programador es un lujo que solo pueden tener las personas que no tienen plazos / malos trabajos / jefes, de lo contrario, estoy de acuerdo con usted. Pensé que mi punto era claro al principio.
Filipe Madureira
70

Puede agregar un nuevo carácter de línea después del símbolo @ así:

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

También puede usar la NewLinepropiedad en la EnvironmentClase (creo que es Medio ambiente).

Jason
fuente
1
Pero necesito escribir esta información en un archivo de texto como este fkdfdsfdflkdkfk @ dfsdfjk72388389 @ kdkfkdfkkl @ jkdjkfjd @ jjjk @ El nuevo carácter de línea no es efectivo en el archivo de texto.
balaweblog
18

Las respuestas anteriores se acercan, pero para cumplir con el requisito real de que el @símbolo permanezca cerca, querrás que así sea str.Replace("@", "@" + System.Environment.NewLine). Eso mantendrá el @símbolo y agregará los caracteres de nueva línea apropiados para la plataforma actual.

Marcus Griep
fuente
9

Luego solo modifique las respuestas anteriores a:

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

Si no desea las nuevas líneas en el archivo de texto, no lo conserve.

Benjamin Autin
fuente
6

Un simple reemplazo de cadena hará el trabajo. Eche un vistazo al programa de ejemplo a continuación:

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

Como otros han dicho, la nueva línea char le dará una nueva línea en un archivo de texto en Windows. prueba lo siguiente:

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
fuente
Solo vi su entorno. Nueva línea == \ r \ n = verdadero ahora (tal vez lo perdí porque no es la sintaxis de C #;)). Además, más información aquí msdn.microsoft.com/de-de/library/… . Sólo tropezado con un problema similar con el uso de hardcoded \ n no me da una nueva línea en las ventanas ..
Andreas Reiff
3

Según sus respuestas a todos los demás, algo como esto es lo que está buscando.

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

Salida

Kathiravan C
fuente
2
Si bien este código puede responder a la pregunta, proporcionar un contexto adicional con respecto a por qué y / o cómo este código responde a la pregunta mejora su valor a largo plazo.
Thomas Flinkow
0

También podrías usar string[] something = text.Split('@'). Asegúrese de utilizar comillas simples para rodear la "@" para almacenarla como un chartipo. Esto almacenará los caracteres hasta e incluyendo cada "@" como palabras individuales en la matriz. Luego puede generar cada ( element + System.Environment.NewLine) usando un bucle for o escribirlo en un archivo de texto usando System.IO.File.WriteAllLines([file path + name and extension], [array name]). Si el archivo especificado no existe en esa ubicación, se creará automáticamente.

TehSpowage
fuente
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
fuente
1
Bienvenido a la comunidad SO. Gracias por responder la pregunta. Sin embargo, es una buena práctica agregar alguna explicación de por qué esto funciona.
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
fuente