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

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');
RichieHindle
fuente
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' );
JP Alioto
fuente
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.

Alex Wiese
fuente
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)

Crash893
fuente
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') .

martinp999
fuente
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.

Matthew Flaschen
fuente
4

Para nosotros VBers:

TrimEnd(New Char() {ControlChars.Cr, ControlChars.Lf})
Simón
fuente
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+", " ");
vnRock
fuente
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í.

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

Matasoy
fuente
0
varName.replace(/[\r\n]/mg, '')                                              
Palmadita
fuente
0

Esto es lo que conseguí trabajar para mí.

s.Replace("\r","").Replace("\n","")
Jordan Mahsman
fuente