¿Cómo eliminar nuevos caracteres de línea de una cadena?

Tengo una cadena en el siguiente formato

string s = "This is a Test String.\n This is a next line.\t This is a tab.\n' 

Quiero eliminar todas las ocurrencias de \n y \r de la cadena de arriba.

He intentado con la string s = s.Trim(new char[] {'\n', '\r'}); pero no ayudó.

Me gusta usar expresiones regulares En este caso, podrías hacer:

 string replacement = Regex.Replace(s, @"\t|\n|\r", ""); 

Las expresiones regulares no son tan populares en el mundo .NET como lo son en los lenguajes dynamics, pero proporcionan una gran cantidad de poder para manipular cadenas.

Desea utilizar String.Replace para eliminar un personaje.

 s = s.Replace("\n", String.Empty); s = s.Replace("\r", String.Empty); s = s.Replace("\t", String.Empty); 

Tenga en cuenta que String.Trim(params char[] trimChars) solo elimina los caracteres trimChars y finales en trimChars de la instancia invocada.

Puede hacer un método de extensión, que evita los problemas de rendimiento de lo anterior al hacer muchas cadenas temporales:

 static string RemoveChars(this string s, params char[] removeChars) { Contract.Requires(s != null); Contract.Requires(removeChars != null); var sb = new StringBuilder(s.Length); foreach(char c in s) { if(!removeChars.Contains(c)) { sb.Append(c); } } return sb.ToString(); } 

Sé que esta es una publicación anterior, sin embargo, pensé que compartiría el método que uso para eliminar nuevos caracteres de línea.

 s.Replace(Environment.NewLine, ""); 

Referencias

MSDN String.Replace Method y MSDN Environment.NewLine Property

Si la velocidad y el uso de poca memoria son importantes, haga algo como esto:

 var sb = new StringBuilder(s.Length); foreach (char i in s) if (i != '\n' && i != '\r' && i != '\t') sb.Append(i); s = sb.ToString(); 

solo haz eso

 s = s.Replace("\n", String.Empty).Replace("\t", String.Empty).Replace("\r", String.Empty); 

Un enfoque LINQ:

 string s = "This is a Test String.\n This is a next line.\t This is a tab.\n'"; string s1 = String.Join("", s.Where(c => c != '\n' && c != '\r' && c != '\t')); 

La elección correcta depende de cuán grande sea la cadena de entrada y cuáles sean los requisitos de memoria y fuerza, pero usaría una expresión regular como

 string result = Regex.Replace(s, @"\r\n?|\n|\t", String.Empty); 

O si necesitamos aplicar el mismo reemplazo varias veces, es mejor usar una versión comstackda para el Regex como

 var regex = new Regex(@"\r\n?|\n|\t", RegexOptions.Compiled); string result = regex.Replace(s, String.Empty); 

NOTA: diferentes escenarios requieren diferentes enfoques para lograr el mejor rendimiento y el mínimo consumo de memoria

Bueno … Me gustaría que entendieras áreas más específicas del espacio. \t realidad está clasificado como un espacio horizontal, no como un espacio vertical. (pruebe insertar \t en el Bloc de notas)

Si usa Java, simplemente use \v . Ver la referencia a continuación.

\h – Un carácter de espacio en blanco horizontal:

[\t\xA0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000]

\v – Un carácter de espacio en blanco vertical:

[\n\x0B\f\r\x85\u2028\u2029]

Pero soy consciente de que usas .NET. Entonces mi respuesta para reemplazar cada espacio vertical es …

 string replacement = Regex.Replace(s, @"[\n\u000B\u000C\r\u0085\u2028\u2029]", ""); 

FYI,

Trim () hace eso ya.

La siguiente muestra de LINQPad:

 void Main() { var s = " \rsdsdsdsd\nsadasdasd\r\n "; s.Length.Dump(); s.Trim().Length.Dump(); } 

Productos:

 23 18 

Puede usar Trim si desea eliminar desde el inicio y el final.

 string stringWithoutNewLine = "\n\nHello\n\n".Trim();