2009-12-30 16 views
45

Estoy intentando persistir la cadena desde un área de texto ASP.NET. Necesito quitar las alimentaciones de la línea de retorno del carro y luego dividir lo que quede en una matriz de 50 caracteres.¿Cómo puedo eliminar " r n" de una cadena en C#? ¿Puedo usar un regEx?

tengo esto hasta ahora

var commentTxt = new string[] { }; 
var cmtTb = GridView1.Rows[rowIndex].FindControl("txtComments") as TextBox; 
if (cmtTb != null) 
    commentTxt = cmtTb.Text.Length > 50 
     ? new[] {cmtTb.Text.Substring(0, 50), cmtTb.Text.Substring(51)} 
     : new[] {cmtTb.Text}; 

Funciona bien, pero no estoy Excluyendo los caracteres CRLF. ¿Cómo hago esto correctamente?

Gracias, ~ ck en San Diego

Respuesta

84

Se podría utilizar una expresión regular, sí, pero un String.Replace sencilla() probablemente suficiente.

myString = myString.Replace("\r\n", string.Empty); 
+48

mejor podría ser 'myString.Replace .Colocar ("\ r", String.Empty) (" \ n ", string.Empty);', dado que las cadenas en la naturaleza pueden tener muchas disposiciones CR/LF. –

+1

¿No sería mejor usar Enviroment.Newline ??? – PostMan

+6

Environment.NewLine sería la idea del servidor de lo que es una nueva línea. Este texto proviene del cliente, que puede usar diferentes caracteres para nuevas líneas. Aquí hay una respuesta que muestra lo que diferentes navegadores usan para líneas nuevas: http://stackoverflow.com/questions/1155678/javascript-string-newline-character/1156388#1156388 –

1

Suponiendo que desea reemplazar los saltos de línea con algo por lo que algo como esto:

the quick brown fox\r\n 
jumped over the lazy dog\r\n 

no termina así:

the quick brown foxjumped over the lazy dog 

lo haría algo como esto:

string[] SplitIntoChunks(string text, int size) 
{ 
    string[] chunk = new string[(text.Length/size) + 1]; 
    int chunkIdx = 0; 
    for (int offset = 0; offset < text.Length; offset += size) 
    { 
     chunk[chunkIdx++] = text.Substring(offset, size); 
    } 
    return chunk; 
}  

string[] GetComments() 
{ 
    var cmtTb = GridView1.Rows[rowIndex].FindControl("txtComments") as TextBox; 
    if (cmtTb == null) 
    { 
     return new string[] {}; 
    } 

    // I assume you don't want to run the text of the two lines together? 
    var text = cmtTb.Text.Replace(Environment.Newline, " "); 
    return SplitIntoChunks(text, 50);  
} 

Me disculpo si la sintaxis no es perfecta; No estoy en una máquina con C# disponible en este momento.

18

Esto divide la cadena en cualquier combo de nuevos caracteres de línea y los une con un espacio, suponiendo que realmente desea el espacio donde habrían estado las nuevas líneas.

var oldString = "the quick brown\rfox jumped over\nthe box\r\nand landed on some rocks."; 
var newString = string.Join(" ", Regex.Split(oldString, @"(?:\r\n|\n|\r)")); 
Console.Write(newString); 

// prints: 
// the quick brown fox jumped over the box and landed on some rocks. 
+0

¡La mejor elección ... alguna vez! –

+0

¡Gracias, eso me ahorró mucho tiempo! – Munchies

+0

Esto me ayudó más. – OneHoopyFrood

33

.Trim() ¡la función hará todo el trabajo por usted!

Estaba probando el código anterior pero después de la función "recorte", y noté que todo está "limpio" incluso antes de que llegue al código de reemplazo.

String input:  "This is an example string.\r\n\r\n" 
Trim method result: "This is an example string." 

Fuente: http://www.dotnetperls.com/trim

+11

-1 Dado que esto solo funciona para el comienzo y el final de una cadena. – im1dermike

+1

@ im1dermike Creo que un voto negativo es un poco innecesario, acabo de encontrarlo y lo usé, definitivamente la mejor opción para mi caso –

+3

@SeanMissingham El hecho de que una respuesta insuficiente haya funcionado para ti no significa que sea una buena respuesta. – im1dermike

14

código más agradable para esto:

yourstring = yourstring.Replace(System.Environment.NewLine, string.Empty); 
+0

THANX..it Funcionó –

+9

-1: esto solo funciona si el texto se creó en el mismo entorno. –

2

Prueba esto:

private void txtEntry_KeyUp(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Enter) 
     { 
      string trimText; 

      trimText = this.txtEntry.Text.Replace("\r\n", "").ToString(); 
      this.txtEntry.Text = trimText; 
      btnEnter.PerformClick(); 
     } 
    } 
+1

Utilice Reemplazar ("\ r", ""). Reemplazar ("\ n", "") para admitir una gama más amplia de secuencias de fin de línea específicas de la plataforma. –

1

Aquí es el método perfecto

Tenga en cuenta que Environment.NewLine funciona en Microsoft Plataformas.

Además de lo anterior es necesario agregar \ r y \ n en una función separada!

Este es el código que apoyará si se escribe en Linux, Windows o Mac

  var stringTest = "\r Test\nThe Quick\r\n brown fox"; 
      Console.WriteLine("Original is:"); 
      Console.WriteLine(stringTest); 
      Console.WriteLine("-------------"); 
      stringTest = stringTest.Trim().Replace("\r", string.Empty); 
      stringTest = stringTest.Trim().Replace("\n", string.Empty); 
      stringTest = stringTest.Replace(Environment.NewLine, string.Empty); 
      Console.WriteLine("Output is : "); 
      Console.WriteLine(stringTest); 
      Console.ReadLine(); 
Cuestiones relacionadas