web-dev-qa-db-fra.com

Supprimer un personnage de mon stringbuilder

J'ai le générateur de chaînes suivant en tant que msrtResult, qui est assez long:

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

Comment puis-je supprimer le dernier "," de mstrResult Now? (c'est au milieu de ce mstrResult et ce n'est pas le dernier caractère de la chaîne entière puisque j'y ajoute des chaînes) Je devrais le faire avant d'ajouter la nouvelle ligne. Merci

34
Faulty Orc

Vous pouvez simplement diminuer la longueur pour raccourcir la chaîne (C #):

mstrResult.Length -= 1;

ÉDITER:

Après avoir mis à jour votre question, je pense que je sais ce que vous voulez :)

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

Ajoutez une extension 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;
}

puis invoquez:

yourStringBuilder.RemoveLast(",");
13
nznoor

Vous pouvez utiliser StringBuilder.Remove() si vous connaissez la position du ou des caractères que vous souhaitez supprimer.

J'imagine qu'il serait plus facile de ne pas l'ajouter en premier lieu.


Votre question mise à jour concerne la suppression du dernier caractère virgule. Je suppose que vous voulez le faire pour éviter de créer un message qui ressemble à ceci:

Ma liste de courses contenait du lait, des œufs, du beurre et du poisson.

Vous assembleriez cela en boucle, en itérant sur un tableau. Habituellement, vous pouvez écrire la boucle afin de simplement choisir (par exemple avec une instruction if) de ne pas ajouter la commande lorsque vous êtes dans l'itération finale de la boucle.

3
David Heffernan

Pour supprimer simplement le dernier caractère que vous avez ajouté, utilisez ci-dessous: (Ceci est VB mais C devrait fonctionner de la même manière))

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

Essayer

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