2011-04-18 17 views
28

estoy teniendo el siguiente constructor de cadena como msrtResult, que es bastante largo:Extracción de un carácter de mi StringBuilder

mstrResult.Append(rtbResult.Text).Append("})})" + Environment.NewLine) 

¿Cómo puedo eliminar el último "" de mstrResult ahora? (Está en el medio de ese mstrResult y no es el último carácter de la cadena completa, ya que le agrego cadenas) Debería hacerlo antes de agregar la nueva línea. Gracias

+1

No puedo entender completamente su pregunta. ¿Podría detallarlo un poco más? –

+0

Yo, también, no entiendo completamente su pregunta/objetivo. ¿Dónde se pone esa coma en StringBuilder? Si está contenido en 'rtbResult.Text', puede considerar reemplazarlo allí. –

Respuesta

3

Puede usar StringBuilder.Remove() si conoce la posición de los caracteres que desea eliminar.

Me imagino que sería más fácil no agregarlo en primer lugar.


Su pregunta actualizada se refiere a la eliminación del último carácter de coma. Supongo que quieres hacer esto para evitar la creación de un mensaje que se parece a esto:

Mi lista de compras contenida leche, huevos, mantequilla y pescado.

Armaría esto en un bucle, iterando sobre una matriz. Por lo general, puede escribir el ciclo de modo que simplemente elija (por ejemplo, con una instrucción if) no agregar el comando cuando se encuentre en la iteración final del ciclo.

+0

No conozco la posición desafortunadamente y tampoco puedo hacerlo porque estoy en una iteración y solo necesito eliminar el último carácter de "," –

+2

Si agregaste, al principio en lugar de al final, sabría que fue el primero que necesita eliminar ...y luego podrías usar Eliminar? – spacemonkeys

+0

¡Larga vida a la coma de Oxford! – goodeye

1

Trate

mstrResult.Remove(mstrResult.Length - 1 - Environment.NewLine.Length 
       , Environment.NewLine.Length); 
60

solo se puede disminuir la longitud de acortar la cadena (C#):

mstrResult.Length -= 1; 

EDIT:

Después informado que pregunta, creo que sé lo quieres :) ¿Qué tal esto:

mstrResult.Append(rtbResult.Text).Append("})})" + Environment.NewLine); 
var index = mstrResult.ToString().LastIndexOf(','); 
if (index >= 0) 
    mstrResult.Remove(index, 1); 
+1

+1 No creo que te permita hacer esto, pero marcó MSDN y sí, se ve bien. Me gusta. –

+0

Una cosa a tener en cuenta es que ha agregado un comando en primer lugar y que este código no falla debido a que la cadena no tiene comas, o falla al eliminar una coma de una porción anterior del texto. –

+0

@David Tienes razón. Se agregó un cheque para verificar que realmente hay una coma presente. No estaba seguro de si @Faulty quería eliminar la coma de rtbResult de mstrResult, pero cambiar eso sería trivial. –

13

Agregue una extensión StringBuilder.

public static StringBuilder RemoveLast(this StringBuilder sb, string value) 
{ 
    if(sb.Length < 1) return sb; 
    sb.Remove(sb.ToString().LastIndexOf(value), value.Length); 
    return sb; 
} 

continuación, se invoca:

yourStringBuilder.RemoveLast(","); 
-2

Uso:

stringbuilder blahh = new stringbuilder() 
int searchKey = blahh.LastIndexOf(','); 

luego llamar a

blahh.Remove(searchKey, 1).Insert(searchKey, " and"); or a blank. 
0

Para eliminar sólo el último carácter añadida automáticamente el uso a continuación: (Esto es VB pero C debería funcionar de manera similar)

Dim c As New StringBuilder 
c.Remove(c.Length - 1, 1)