Cuéntanos más: ¿qué es un "salto de línea" para ti? ¿Con qué quieres reemplazarlos?
Jay Bazuzi
ja ja. Estaba comprobando lo mismo en Java cuando descubrí que System.getProperty ("line.separator") tenía curiosidad por saber la contraparte en C #. Tu publicación me ayudó.
myString = myString.Replace(System.Environment.NewLine,"replacement text");//add a line terminating ;
Como se mencionó en otras publicaciones, si la cadena proviene de otro entorno (SO), entonces deberá reemplazar esa implementación de entornos particulares de nuevos caracteres de control de línea .
Primero no funcionó para mí. Después de investigar un poco, encontré la solución: tenía que usar 'usar el sistema'; o 'System.Environment.NewLine'
Smolla
12
No eliminó todos los caracteres de nueva línea. Pruebe esta cadena "\ n \ r \ nMi mensaje \ r \ n \ n \ r \ n es esto. \ N \ n \ r \ n"
Shakti Prakash Singh
13
En general, me gusta esta solución. Sin embargo, tenga en cuenta que incluso en el mismo sistema operativo, las nuevas líneas reales pueden no coincidir. Esto me sucedió por qué el procesamiento devolvió SQL. Las nuevas líneas eran \ n, mientras que Environment.NewLine era \ r \ n. El resultado fue que nada coincidía, por lo que las nuevas líneas permanecieron.
Dono
@Dono> ¿de dónde provienen los datos SQL? Probablemente de una fuente externa que se ocupa de nuevas líneas a la manera UNIX. Eso es un problema con el formato de datos, no con el sistema operativo o este método ...
Laurent S.
Este debería ser uno de los métodos estáticos de la clase String. .NET sí mismo debería ser capaz de detectar el formato de los saltos de línea de origen en una cadena y convertirla en Environment.NewLine \ r \ n formato ...
Dean Kuga
442
Las soluciones publicadas hasta ahora solo reemplazan Environment.NewLine o fallan si la cadena de reemplazo contiene saltos de línea porque llaman string.Replacevarias 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);
¿Entonces su dicho haciendo Regex.Replace (input, @ "[\ r \ n] +", replaceString) no lograría la misma tarea?
flamebaud
77
@flamebaud No, eso produciría un resultado diferente si hay múltiples saltos de línea seguidos. "\ r \ n? | \ n" reemplazaría cada salto de línea, mientras que "[\ r \ n] +" haría un reemplazo simple para cualquier número de saltos de línea.
David Hammond
Para aquellos preocupados por los saltos de línea múltiples: / (\ r \ n? | \ N) / gm
BobbyA
44
Esta es realmente la solución correcta si desea eliminar el salto de línea en una cadena que puede provenir de un sistema operativo diferente. Un buen ejemplo es el formato JSON. +1
Bastien Vandamme
1
Si no se usa la cadena literal (prefijo @), entonces necesitaría tener dos barras invertidas en una fila en todas partes, por lo que la respuesta de @mark_byers anterior sigue siendo correcta. El prefijo @ hace que la barra diagonal inversa sea parte de la cadena que debe ser para que Regex lo use como el carácter de escape.
Kirk Liemohn
173
Para ampliar 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 ver para asegurarse de tomar todas las alternativas ...
@ShawnDotey no es necesario, queremos reemplazar los caracteres de control, no las secuencias de barra invertida y letra.
N. Kudryavtsev
38
Usaría Environment.Newline cuando quisiera insertar una nueva línea para una cadena, pero no eliminar todas las nuevas líneas de una cadena.
Dependiendo de su plataforma, puede tener diferentes tipos de nuevas líneas, pero incluso dentro de la misma plataforma, a menudo se utilizan diferentes tipos de nuevas líneas. En particular cuando se trata de formatos de archivo y protocolos.
Esto es lo único que funcionó para mí cuando quería colapsar un código de página web recuperado en una sola línea (para facilitar los patrones de expresiones regulares).
Paw Baltzersen
Totalmente de acuerdo con Brian R. Bondy. La solución ofrecida por Corin y tan votada es muy ingenua, al menos.
Califf
18
Si se supone que su código se ejecuta en diferentes entornos, consideraría usar la Environment.NewLineconstante, ya que es específicamente la newlineutilizada 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 reemplazarla con cualquier constante de nueva línea que se use en el otro sistema. Normalmente será \no \r\n.
Debe reasignarlo nuevamente a la variable original ya que el reemplazo no ocurre en su lugar.
tvanfosson
@driss Me gustaría saber cómo elegiría una constante de línea nueva correcta cuando no tiene idea de qué sistema proviene un archivo ... esta solución realmente parece ser UNIVERSAL.
Califf
14
No olvide que reemplazar 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 reemplazara con 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 provistos.
string line =...
line = line.Replace("\r","").Replace("\n","");
no se puede tener ''en C #: no existe un carácter vacío. se '\0'trabajará en su lugar?
Shevek
1
@Shevek: acabo de utilizar las comillas incorrectas. Debe haber estado haciendo una buena cantidad de javascript el día que respondí esto.
tvanfosson
@Califf: es equivalente, no mejor.
tvanfosson
2
el error que cometiste aquí solo prueba que ES mejor. La mayoría de las empresas para las que trabajé tienen su estándar de codificación: NO UTILICE LITERALES CODIFICADOS.
Califf
2
@Califf el "error" que cometí no se habría realizado en un IDE con Intellisense ni se habría compilado. Si crees que eso string.Emptyes mejor, utilízalo.
tvanfosson
10
Para asegurarse de que se reemplacen todas las formas posibles de saltos de línea (Windows, Mac y Unix), debe usar:
La mejor manera de reemplazar saltos de línea de forma segura es
yourString.Replace("\r\n","\n")//handling windows linebreaks.Replace("\r","\n")//handling mac linebreaks
eso debería producir una cadena con solo \ n (por ejemplo, salto de línea) como saltos de línea. Este código también es útil para corregir saltos de línea mixtos.
Como una nueva línea puede delimitarse por \n, \ry \r\n, primero reemplazaremos \ry \r\npor \n, y solo luego dividiremos la cadena de datos.
Las siguientes líneas deberían ir al parseCSVmétodo:
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 rowsvar rows = data.split("\n");}
Otra opción es crear un StringReadersobre la cadena en cuestión. En el lector, hazlo .ReadLine()en un bucle. Luego tiene las líneas separadas, sin importar qué separadores (consistentes o inconsistentes) tengan. Con eso, puede proceder como lo desee; una posibilidad es usar un StringBuildery recurrir .AppendLinea él.
La ventaja es que permite que el marco decida qué constituye un "salto de línea".
var input =@"sdfhlu \r\n sdkuidfs\r\ndfgdgfd";var match =@"[\\ ]+";var replaceWith =" ";Console.WriteLine("input: "+ input);var x =Regex.Replace(input.Replace(@"\n", replaceWith).Replace(@"\r", replaceWith), match, replaceWith);Console.WriteLine("output: "+ x);
Si desea reemplazar nuevas líneas, pestañas y espacios en blanco:
var input =@"sdfhlusdkuidfs\r\ndfgdgfd";var match =@"[\\s]+";var replaceWith ="";Console.WriteLine("input: "+ input);var x =Regex.Replace(input, match, replaceWith);Console.WriteLine("output: "+ x);
Respuestas:
Usar reemplazar con
Environment.NewLine
Como se mencionó en otras publicaciones, si la cadena proviene de otro entorno (SO), entonces deberá reemplazar esa implementación de entornos particulares de nuevos caracteres de control de línea .
fuente
Las soluciones publicadas hasta ahora solo reemplazan
Environment.NewLine
o fallan si la cadena de reemplazo contiene saltos de línea porque llamanstring.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.
fuente
Para ampliar 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 ver para asegurarse de tomar todas las alternativas ...
debería ponerte en marcha ...
fuente
Line.Replace("\n", replaceWith).Replace("\r", replaceWith);
suficiente?\r\n
, terminará con la cadena de reemplazo dos veces, lo que no es ideal.Usaría Environment.Newline cuando quisiera insertar una nueva línea para una cadena, pero no eliminar todas las nuevas líneas de una cadena.
Dependiendo de su plataforma, puede tener diferentes tipos de nuevas líneas, pero incluso dentro de la misma plataforma, a menudo se utilizan diferentes tipos de nuevas líneas. En particular cuando se trata de formatos de archivo y protocolos.
fuente
Si se supone que su código se ejecuta en diferentes entornos, consideraría usar la
Environment.NewLine
constante, ya que es específicamente lanewline
utilizada en el entorno específico.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 reemplazarla con cualquier constante de nueva línea que se use en el otro sistema. Normalmente será
\n
o\r\n
.fuente
No olvide que reemplazar 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 reemplazara con 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 provistos.
Como métodos de extensión:
fuente
''
en C #: no existe un carácter vacío. se'\0'
trabajará en su lugar?string.Empty
es mejor, utilízalo.Para asegurarse de que se reemplacen todas las formas posibles de saltos de línea (Windows, Mac y Unix), debe usar:
y en este orden, para no hacer saltos de línea adicionales, cuando encuentre alguna combinación de caracteres de final de línea.
fuente
si desea "limpiar" las nuevas líneas, el comentario flamebaud usando regex
@"[\r\n]+"
es la mejor opción.fuente
Necesitaba reemplazar el
\r\n
con un retorno de carro real y avance de línea y reemplazar\t
con una pestaña real. Entonces se me ocurrió lo siguiente:fuente
¿Por qué no los dos?
Nota: Reemplace
strin
con el nombre de su cadena de entrada.fuente
fuente
Use el método .Replace ()
fuente
La mejor manera de reemplazar saltos de línea de forma segura es
eso debería producir una cadena con solo \ n (por ejemplo, salto de línea) como saltos de línea. Este código también es útil para corregir saltos de línea mixtos.
fuente
Como una nueva línea puede delimitarse por
\n
,\r
y\r\n
, primero reemplazaremos\r
y\r\n
por\n
, y solo luego dividiremos la cadena de datos.Las siguientes líneas deberían ir al
parseCSV
método:fuente
o
dependiendo de qué camino quieres ir.
Espera que ayude.
fuente
Otra opción es crear un
StringReader
sobre la cadena en cuestión. En el lector, hazlo.ReadLine()
en un bucle. Luego tiene las líneas separadas, sin importar qué separadores (consistentes o inconsistentes) tengan. Con eso, puede proceder como lo desee; una posibilidad es usar unStringBuilder
y recurrir.AppendLine
a él.La ventaja es que permite que el marco decida qué constituye un "salto de línea".
fuente
Si desea reemplazar solo las líneas nuevas:
Si desea reemplazar nuevas líneas, pestañas y espacios en blanco:
fuente