2009-03-16 37 views
70

¿Cómo reemplazo \n con espacio vacío?Método String.Replace (char, char) en C#

Me aparece un error literal vacío si hago esto:

string temp = mystring.Replace('\n', ''); 
+0

Debo añadir esa cadena temp = mystring.Replace ("\ n", ""); no logra nada – sarsnake

+6

también, realmente no importa, pero en lugar de "" podría usar string.Empty. me hace sentir mejor =) –

Respuesta

118

String.Replace('\n', '') no funciona porque '' no es un carácter válido literal.

Si utiliza la anulación String.Replace (string, string), debería funcionar.

string temp = mystring.Replace("\n", ""); 
+0

pls lea mis notas. \ n no se elimina con este – sarsnake

+0

Debe, de lo contrario, falta el \ r de la nueva línea o no almacena correctamente el valor devuelto de Reemplazar. – Samuel

+0

@sarsnake probablemente no advierta el uso de comillas dobles para la sobrecarga de cadenas. – devlord

4

Esto debería funcionar.

string temp = mystring.Replace("\n", ""); 

¿Estás seguro de que hay \ n nuevas líneas reales en tu cadena original?

0
string temp = mystring.Replace("\n", " "); 
+0

no lo quiere reemplazar con un espacio. queríamos que se reemplazara con string.Empty. –

1

Una advertencia: en .NET the linefeed es "\ r \ n". Por lo tanto, si está cargando su texto desde un archivo, es posible que deba usarlo en lugar de simplemente "\ n"

editar> como señaló samuel en los comentarios, "\ r \ n" no es específico de .NET , pero es específico de Windows.

+5

-1, "\ r \ n" no es de .NET. Es de Windows, use Environment.NewLine para encontrar la secuencia de nueva línea para el entorno (Windows/Linux/Other). – Samuel

+0

De cualquier manera, el punto sigue en pie. "\ n" no es necesariamente el salto de línea. –

+0

Y "\ n" no es necesariamente el salto de línea. Como el póster lo tiene, se debe inferir que es el avance de línea que están buscando. – Samuel

2

Si utiliza

string temp = mystring.Replace("\r\n", "").Replace("\n", ""); 

entonces usted no tendrá que preocuparse de donde la cadena está viniendo.

+1

¿No debería ser eso mystring.Replace ("\ r \ n", "") .Replace ("\ n", "")? Si reemplaza \ n con "", entonces "\ r \ n" se convierte en "\ r" y "\ r \ n" no coincidirá con nada. –

1

¿Qué pasa con la creación de un método de extensión como esto ....

public static string ReplaceTHAT(this string s) 
{ 
    return s.Replace("\n\r", ""); 
} 

Y luego, cuando se desea reemplazar cualquier lugar que se desea se puede hacer esto.

s.ReplaceTHAT(); 

Best Regards!

+1

+1 para aumentar la legibilidad y la reutilización sugiriendo el Método de extensión, pero el nombre del método podría ser algo más descriptivo, como ReplaceNewLine() – tie

0

@gnomixa - ¿Qué quiere decir en su comentario sobre no lograr nada? Lo siguiente me funciona en VS2005.

Si su objetivo es eliminar los caracteres de nueva línea, acortando así la cadena, mira esto:

 string originalStringWithNewline = "12\n345"; // length is 6 
     System.Diagnostics.Debug.Assert(originalStringWithNewline.Length == 6); 
     string newStringWithoutNewline = originalStringWithNewline.Replace("\n", ""); // new length is 5 
     System.Diagnostics.Debug.Assert(newStringWithoutNewline.Length == 5); 

Si su objetivo es reemplazar los caracteres de nueva línea con un carácter de espacio, dejando la longitud de la cadena del mismo , mira este ejemplo:

 string originalStringWithNewline = "12\n345"; // length is 6 
     System.Diagnostics.Debug.Assert(originalStringWithNewline.Length == 6); 
     string newStringWithoutNewline = originalStringWithNewline.Replace("\n", " "); // new length is still 6 
     System.Diagnostics.Debug.Assert(newStringWithoutNewline.Length == 6); 

Y usted tiene que reemplazar cadenas de un solo carácter en lugar de caracteres, porque '' no es un carácter válido para ser pasado a reemplazar (cadena, char)

15

Como reemplazar "\ n" por "" no le da el resultado que desea, eso significa que lo que debe reemplazar no es realmente "\ n", sino alguna otra combinación de caracteres.

Una posibilidad es que lo que debe reemplazar es la combinación de caracteres "\ r \ n", que es el código de nueva línea en un sistema Windows. Si reemplaza solo el carácter "\ n" (avance de línea), dejará el carácter "\ r" (retorno de carro), que aún se puede interpretar como un salto de línea, según cómo muestre la cadena.

Si la fuente de la cadena es específica del sistema, debe usar esa cadena específica; de lo contrario, debe usar Environment.NewLine para obtener la combinación de caracteres de nueva línea para el sistema actual.

string temp = mystring.Replace("\r\n", string.Empty); 

o:

string temp = mystring.Replace(Environment.NewLine, string.Empty); 
1

Aquí está su respuesta exacta ...

const char LineFeed = '\n'; // #10 
string temp = new System.Text.RegularExpressions.Regex(
        LineFeed 
      ).Replace(mystring, string.Empty); 

pero éste es mucho mejor ... especialmente si usted está tratando de dividir las líneas (también puede usarlo con Split)

const char CarriageReturn = '\r'; // #13 
const char LineFeed = '\n'; // #10 
string temp = new System.Text.RegularExpressions.Regex(
        string.Format("{0}?{1}", CarriageReturn, LineFeed) 
      ).Replace(mystring, string.Empty); 
+1

¿Cuál es la sobrecarga de usar una expresión regular para un reemplazo trivial? –

+0

reemplaza tanto "\ r \ n" como "\ n" para que ambos trabajos (doble sustitución o superior) – cilerler

+0

demasiada complicación innecesaria y código adicional, cilerler. :('string temp = mystring.Replace (" \ n ", string.Empty) .Replace (" \ r ", string.Empty);' es mucho más rápido y más simple. –

2

conocer en Bytes.com:

string temp = mystring.Replace('\n', '\0');// '\0' representa un carbón vacío

+2

'\ 0' es NULL no está vacío. ..> _> y sí sé que esto es viejo, pero eso es información peligrosa allí mismo – dten

+0

i segunda y tercera refutación de dten. '\ 0' es un personaje. El nombre del personaje a veces se llama NIL o incluso rara vez 'char vacío ', pero este uso de' vacío 'es confuso y engañoso para las personas que no conocen mejor.' \ 0 '= el carácter 0, que es otro personaje como cualquier otro, pero cada personaje tiene una función. un personaje que puedes tratar como un personaje vacío, entonces puedes usar '\ 0'. A veces lo hago, pero solo una respuesta de una línea que dice que es un personaje vacío realmente es 'información peligrosa' como dten advierte. –

+0

nulo y empty y '\ 0' se usan generalmente para representar 3 valores diferentes que no son equivalentes (pero están relacionados). null es un valor de cadena que essen dice "mi valor falta" o "no está aquí". vacío significa que el valor existe, pero no tiene caracteres; su longitud es cero. y '\ 0' no es una cadena. una cadena puede tener un carácter que puede ser '\ 0' o cualquier otro valor de carácter. pero es verdad que algunas personas llaman '\ 0' un char NIL, un char NULL o un personaje vacío. así que ten cuidado con el código. en C#, 'null! = string.Empty',' null! = '\ 0'' y 'string.Empty! =' \ 0''. –

0

Sé que esto es una entrada antigua, pero me gustaría añadir mi método.

public static string Replace(string text, string[] toReplace, string replaceWith) 
    { 
     foreach (string str in toReplace) 
      text = text.Replace(str, replaceWith); 

     return text; 
    } 

Ejemplo de uso:

string newText = Replace("This is an \r\n \n an example.", new string[] { "\r\n", "\n" }, ""); 
4
string temp = mystring.Replace("\n", string.Empty).Replace("\r", string.Empty); 

Obviamente, esto elimina tanto '\ n' y '\ r' y es tan simple como que sé cómo hacerlo.