Eliminando el retorno de carro y la nueva línea del final de una cadena en c #


113

¿Cómo elimino el carácter de retorno de carro (\r)y el carácter (\n)de nueva línea del final de una cadena?

Respuestas:


198

Esto recortará cualquier combinación de retornos de carro y nuevas líneas desde el final de s:

s = s.TrimEnd(new char[] { '\r', '\n' });

Editar : O como JP amablemente señala, puede deletrearlo de manera más sucinta como:

s = s.TrimEnd('\r', '\n');

10
Tome nota de la palabra clave params en la declaración de TrimEnd, le permite pasar varias instancias de un carácter en lugar de la matriz. msdn.microsoft.com/en-us/library/w5zay9db(VS.71).aspx
JP Alioto

3
¿Qué tal esto? S = s.TrimEnd (System.Environment.NewLine.ToCharArray ());
Ε Г И І И О

4
He estado escribiendo c # desde que salió la v1.0 (hace 10 años). Ahora háblame de TrimEnd. Doh!
s15199d

7
Solo por interés, todo lo que realmente necesita es s = s.TrimEnd(), como dicen los documentos: si trimChars es nulo o una matriz vacía, los caracteres de espacio en blanco Unicode se eliminan en su lugar. - ver String.TrimEnd
Stuart Wood

@StuartWood: ... que no es lo que pidió Avik. Se preguntó específicamente para '\r'y '\n'y nada más, no el carácter de espacio ' ', por ejemplo.
RichieHindle

31

Esto debería funcionar ...

var tst = "12345\n\n\r\n\r\r";
var res = tst.TrimEnd( '\r', '\n' );

19

Si está utilizando varias plataformas, está más seguro utilizando este método.

value.TrimEnd(System.Environment.NewLine.ToCharArray());

Tendrá en cuenta diferentes caracteres de nueva línea y retorno de carro.


El método de JP - tst.TrimEnd( '\r', '\n' )- es razonablemente "seguro" en la práctica ya que los principales EOL son [actualmente] solo combinaciones diferentes de \ry \n, pero el de alexw es la respuesta "correcta". Deje que CLR le diga qué caracteres hay en la nueva línea de esta plataforma. EOL no siempre ha sido combos de 0DS y 0AS
ruffin

Solía ​​usar Environment.NewLinepero no parecía manejar instancias donde \restaba presente sin \n. TrimEnd('r','\n')parece ser más confiable en este caso.
ᴍᴀᴛᴛ ʙᴀᴋᴇʀ

2
Podría ser que esto sea realmente un problema multiplataforma, y ​​dec necesita eliminar específicamente ambos \ r \ n, independientemente de lo que diga el entorno del sistema.
Andrew Hill

12
String temp = s.Replace("\r\n","").Trim();

ssiendo la cadena original. (Nota capitales)


11
Eso también: 1) Eliminará \ r \ n del medio de la cadena, 2) Eliminará cualquier espacio en blanco del principio de la cadena, y 3) eliminará cualquier espacio en blanco del final de la cadena.
RichieHindle

Es cierto, asumí solo una / r / n al final. No se mencionó en la publicación original. No estoy seguro de que merezca un voto de -1
Crash893

Exactamente lo que estaba buscando. Gracias.
NotMe

4
¿Usar replace()entonces trim()no es exagerado cuando TrimEnd()puedo hacer el trabajo solo, o me estoy perdiendo algo?
ᴍᴀᴛᴛ ʙᴀᴋᴇʀ

gran sugerencia @MattBaker
Crash893

8
s.TrimEnd();

Lo anterior es todo lo que necesitaba para eliminar '\ r \ n' del final de mi cadena.

La respuesta votada a favor me parece incorrecta. En primer lugar, no funcionó cuando lo probé, en segundo lugar, si lo hizo el trabajo que se puede esperar que s.TrimEnd ( '\ r', '\ n') sería eliminar sólo sea un '\ r' o una '\ n' , así que tendría que pasarlo por mi cadena dos veces: una para cuando '\ n' estaba al final y la segunda vez para cuando '\ r' estaba al final (ahora que se eliminó el '\ n') .


4

Si siempre hay un solo CRLF, entonces:

myString = myString.Substring(0, myString.Length - 2);

Si puede tenerlo o no, entonces:

Regex re = new Regex("\r\n$");
re.Replace(myString, "");

Ambos (por diseño) eliminarán como máximo un único CRLF. Almacene la expresión regular en caché para el rendimiento.


4

Para nosotros VBers:

TrimEnd(New Char() {ControlChars.Cr, ControlChars.Lf})

3
string k = "This is my\r\nugly string. I want\r\nto change this. Please \r\n help!";
k = System.Text.RegularExpressions.Regex.Replace(k, @"\r\n+", " ");

3

Esto fue demasiado fácil, para mí estoy filtrando ciertos elementos de correo electrónico. Estoy escribiendo mi propio filtro de correo no deseado personalizado. Con \ r y / o \ n en la cadena, estaba borrando todos los elementos en lugar de filtrar.

Entonces, acabo de hacer filter = filter.Remove ('\ n') y filter = filter.Remove ('\ r'). Estoy haciendo mi filtro de modo que un usuario final pueda usar el Bloc de notas para editar directamente el archivo, por lo que no se sabe dónde pueden incrustarse estos caracteres; podría ser otro que al principio o al final de la cadena. Así que eliminarlos todos lo hace.

Todas las demás entradas funcionan, pero ¿Eliminar podría ser la más fácil?

Aprendí bastante más sobre Regex en esta publicación: un trabajo bastante bueno con su uso aquí.


Parece que podrías hacerlo simplementefilter = filter.Remove('\n').Remove('\r');
John Saunders

2

Uso mucho nivel de borrado

String donen = "lots of stupid whitespaces and new lines and others..."

//Remove multilines
donen = Regex.Replace(donen, @"^\s+$[\r\n]*", "", RegexOptions.Multiline);
//remove multi whitespaces
RegexOptions options = RegexOptions.None;
Regex regex = new Regex("[ ]{2,}", options);
donen = regex.Replace(donen, " ");
//remove tabs
char tab = '\u0009';
donen = donen.Replace(tab.ToString(), "");
//remove endoffile newlines
donen = donen.TrimEnd('\r', '\n');
//to be sure erase new lines again from another perspective
donen.Replace(Environment.NewLine, "");

y ahora tenemos una fila limpia



Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.