¿Cómo eliminar TODOS los saltos de línea en la cadena?

Tengo la necesidad de deshacerme de todos los saltos de línea que aparecen en mis cadenas (procedentes de db). Lo hago utilizando el siguiente código:

value.Replace("\r\n", "").Replace("\n", "").Replace("\r", "") 

Puedo ver que hay al menos un personaje que actúa como final de línea que lo sobrevivió. El código char es 8232 .

Es muy flojo de mi parte, pero debo decir que esta es la primera vez que tengo el placer de ver a este personaje. Es obvio que solo puedo reemplazar este carácter directamente, pero estaba pensando en extender mi enfoque actual (basado en reemplazar las combinaciones de “\ r” y “\ n”) a algo mucho más sólido, por lo que no solo incluiría el ‘ 8232 ‘char, pero también todos los demás no encontrados por mí todavía.

¿Tiene un enfoque a prueba de balas para tal problema?

EDICIÓN # 1:

Me parece que hay varias soluciones posibles:

  1. utilizar Regex. Reemplazar.
  2. eliminar todos los caracteres si es IsSeparator o IsControl
  3. Reemplace con “” si es IsWhiteSpace
  4. cree una lista de todos los finales de línea posibles (“\ r \ n”, “\ r”, “\ n”, LF, VT, FF, CR, CR + LF, NEL, LS, PS) y simplemente reemplácelos con vacíos cuerda. Es un montón de reemplazos.

Yo diría que los mejores resultados serán después de aplicar los enfoques 1 y 4, pero no puedo decidir cuál será más rápido. ¿Cuál crees que es el más completo?

EDITAR # 2

He publicado una respuesta a continuación.

A continuación se muestra el método de extensión para resolver mi problema. Por supuesto, LineSeparator y ParagraphEnding se pueden definir en otro lugar, como valores estáticos, etc.

 public static string RemoveLineEndings(this string value) { if(String.IsNullOrEmpty(value)) { return value; } string lineSeparator = ((char) 0x2028).ToString(); string paragraphSeparator = ((char)0x2029).ToString(); return value.Replace("\r\n", string.Empty) .Replace("\n", string.Empty) .Replace("\r", string.Empty) .Replace(lineSeparator, string.Empty) .Replace(paragraphSeparator, string.Empty); } 

De acuerdo con wikipedia , hay muchos terminadores de línea que puede necesitar manejar (incluido este que usted menciona).

LF: Avance de línea, U + 000A
VT: Tabulación vertical, U + 000B
FF: Form Feed, U + 000C
CR: Retorno de carro, U + 000D
CR + LF: CR (U + 000D) seguido de LF (U + 000A)
NEL: Siguiente línea, U + 0085
LS: Separador de línea, U + 2028
PS: Separador de párrafo, U + 2029

8232 (0x2028) y 8233 (0x2029) son los únicos que querrá eliminar. Consulte la documentación para char.IsSeparator .

Apoyos a Yossarian en este caso, creo que tiene razón. Reemplace todos los espacios en blanco con un solo espacio:

 data = Regex.Replace(data, @"\s+", " "); 

Recomiendo eliminar TODO el espacio en blanco (char.IsWhitespace), y reemplazarlo con un solo espacio … IsWhiteSpace se encarga de todos los espacios en blanco extraños de Unicode.

Este es mi primer bash, pero creo que hará lo que quieras …

 var controlChars = from c in value.ToCharArray() where Char.IsControl(c) select c; foreach (char c in controlChars) value = value.Replace(c.ToString(), ""); 

También, vea este enlace para obtener detalles sobre otros métodos que puede usar: Métodos de Char

¿Has probado con string.Replace(Environment.NewLine, "") ? Eso usualmente me da muchos de ellos.

Consulte este enlace: http://msdn.microsoft.com/en-us/library/844skk0h.aspx

Tendrá que jugar y construir una expresión REGEX que funcione para usted. Pero aquí está el esqueleto …

 static void Main(string[] args) { StringBuilder txt = new StringBuilder(); txt.Append("Hello \n\n\r\t\t"); txt.Append( Convert.ToChar(8232)); System.Console.WriteLine("Original: <" + txt.ToString() + ">"); System.Console.WriteLine("Cleaned: <" + CleanInput(txt.ToString()) + ">"); System.Console.Read(); } static string CleanInput(string strIn) { // Replace invalid characters with empty strings. return Regex.Replace(strIn, @"[^\w\.@-]", ""); } 

Suponiendo que 8232 es Unicode, puede hacer esto:

 value.Replace("\u2028", string.Empty); 

personalmente iría con

  public static String RemoveLineEndings(this String text) { StringBuilder newText = new StringBuilder(); for (int i = 0; i < text.Length; i++) { if (!char.IsControl(text, i)) newText.Append(text[i]); } return newText.ToString(); } 

Si tiene una cadena, diga “theString”, use el método Reemplazar y asigne los argumentos que se muestran a continuación:

theString = theString.Replace(System.Environment.NewLine, "");

Aquí hay algunas soluciones rápidas con .NET regex:

  • Para eliminar cualquier espacio en blanco de una cadena: s = Regex.Replace(s, @"\s+", ""); ( \s coincide con cualquier carácter de espacios en blanco de Unicode)
  • Para eliminar todo el espacio en blanco BUT CR y LF: s = Regex.Replace(s, @"[\s-[\r\n]]+", ""); ( [\s-[\r\n]] es una clase de caracteres que contiene una construcción de resta, coincide con cualquier espacio en blanco excepto CR y LF)
  • Para eliminar cualquier espacio en blanco vertical, reste \p{Zs} (cualquier espacio en blanco pero con tabulación) y \t (pestaña) de \s : s = Regex.Replace(s, @"[\s-[\p{Zs}\t]]+", ""); .

Envolviendo el último en un método de extensión:

 public static string RemoveLineEndings(this string value) { return Regex.Replace(value, @"[\s-[\p{Zs}\t]]+", ""); } 

Ver la demo regex .