Reemplazar saltos de línea en una cadena C #

¿Cómo puedo reemplazar las interrupciones de línea dentro de una cadena en C #?

Use replace con Environment.NewLine

 myString = myString.Replace(System.Environment.NewLine, "replacement text") 

Como se menciona en otras publicaciones, si la cadena proviene de otro entorno (SO), entonces necesitarás reemplazar esa implementación particular de entornos de nuevos caracteres de control de línea .

Las soluciones publicadas hasta ahora solo reemplazan a Environment.NewLine o fallan si la cadena de reemplazo contiene saltos de línea porque llaman a string.Replace varias veces.

Aquí hay una solución que usa una expresión regular para hacer los tres reemplazos en una sola pasada sobre la cadena. Esto significa que la cadena de reemplazo puede contener saltos de línea de forma segura.

 string result = Regex.Replace(input, @"\r\n?|\n", replacementString); 

Para extender la respuesta de The.Anyi.9, también debe tener en cuenta los diferentes tipos de salto de línea en el uso general . Dependiendo de dónde se originó su archivo, es posible que desee mirar para asegurarse de atrapar todas las alternativas …

 string replaceWith = ""; string removedBreaks = Line.Replace("\r\n", replaceWith).Replace("\n", replaceWith).Replace("\r", replaceWith); 

Debería ponerte en marcha …

Usaría Environment.Newline cuando quisiera insertar una nueva línea para una cadena, pero no para eliminar todas las líneas nuevas de una cadena.

Dependiendo de su plataforma, puede tener diferentes tipos de líneas nuevas, pero incluso dentro de la misma plataforma, a menudo se usan diferentes tipos de líneas nuevas. En particular cuando se trata de formatos de archivos y protocolos.

 string ReplaceNewlines(string blockOfText, string replaceWith) { return blockOfText.Replace("\r\n", replaceWith).Replace("\n", replaceWith).Replace("\r", replaceWith); } 

Si se supone que su código debe ejecutarse en diferentes entornos, consideraría usar la constante Environment.NewLine , ya que es específicamente la newline utilizada en el entorno específico.

 line = line.Replace(Environment.NewLine, "newLineReplacement"); 

Sin embargo, si obtiene el texto de un archivo que se origina en otro sistema, esta podría no ser la respuesta correcta, y debe reemplazarlo con la constante de nueva línea que se use en el otro sistema. Normalmente será \n o \r\n .

No olvide que replace no hace el reemplazo en la cadena, sino que devuelve una nueva cadena con los caracteres reemplazados. Lo siguiente eliminará los saltos de línea (no los reemplazará). Usaría el método de @Brian R. Bondy si los reemplazo por otra cosa, tal vez envuelto como un método de extensión. Recuerde verificar primero los valores nulos antes de llamar a Reemplazar o los métodos de extensión proporcionados.

 string line = ... line = line.Replace( "\r", "").Replace( "\n", "" ); 

Como métodos de extensión:

 public static class StringExtensions { public static string RemoveLineBreaks( this string lines ) { return lines.Replace( "\r", "").Replace( "\n", "" ); } public static string ReplaceLineBreaks( this string lines, string replacement ) { return lines.Replace( "\r\n", replacement ) .Replace( "\r", replacement ) .Replace( "\n", replacement ); } } 

Para asegurarse de que se reemplacen todas las formas posibles de saltos de línea (Windows, Mac y Unix) debe usar:

 string.Replace("\r\n", "\n").Replace('\r', '\n').Replace('\n', 'replacement'); 

y en este orden, para no hacer saltos de línea adicionales, cuando encuentre una combinación de caracteres de final de línea.

Necesitaba reemplazar el \r\n con un retorno de carro real y avance de línea y reemplazar \t con una pestaña real. Así que se me ocurrió lo siguiente:

 public string Transform(string data) { string result = data; char cr = (char)13; char lf = (char)10; char tab = (char)9; result = result.Replace("\\r", cr.ToString()); result = result.Replace("\\n", lf.ToString()); result = result.Replace("\\t", tab.ToString()); return result; } 
 var answer = Regex.Replace(value, "(\n|\r)+", replacementString); 

¿Por qué no ambos?

 string ReplacementString = ""; Regex.Replace(strin.Replace(System.Environment.NewLine, ReplacementString), @"(\r\n?|\n)", ReplacementString); 

Nota: strin por el nombre de su cadena de entrada.

Use el método .Replace ()

 Line.Replace("\n", "whatever you want to replace with"); 

La mejor manera de reemplazar linebreaks de forma segura es

 yourString.Replace("\r\n","\n") //handling windows linebreaks .Replace("\r","\n") //handling mac linebreaks 

que debería producir una cadena con solo \ n (por ejemplo, avance de línea) como saltos de línea. este código es útil para arreglar los saltos de línea mixtos también.

Como la nueva línea puede delimitarse mediante \n , \r y \r\n , primero reemplazaremos \r y \r\n con \n , y solo entonces dividiremos la cadena de datos.

Las siguientes líneas deberían ir al método parseCSV :

 function parseCSV(data) { //alert(data); //replace UNIX new lines data = data.replace(/\r\n/g, "\n"); //replace MAC new lines data = data.replace(/\r/g, "\n"); //split into rows var rows = data.split("\n"); } 
 string s = Regex.Replace(source_string, "\n", "\r\n"); 

o

 string s = Regex.Replace(source_string, "\r\n", "\n"); 

dependiendo de qué camino quieras ir.

Espera ayuda.

Otra opción es crear un StringReader sobre la cadena en cuestión. En el lector, haga .ReadLine() en un bucle. Luego tiene las líneas separadas, sin importar qué separadores (consistentes o inconsistentes) tengan. Con eso, puedes proceder como lo desees; Una posibilidad es usar un StringBuilder y llamar a .AppendLine en él.

La ventaja es que permite que el marco decida qué constituye un “salto de línea”.