J'ai le suivant
data.AppendFormat("{0},",dataToAppend);
Le problème, c'est que je l'utilise en boucle et qu'il y aura une virgule de test. Quel est le meilleur moyen de supprimer la virgule de fin?
Dois-je changer les données en chaîne la sous-chaîne?
Le plus simple et moyen le plus efficace consiste à exécuter cette commande:
data.Length--;
en faisant cela, vous déplacez le pointeur (c'est-à-dire le dernier index) d'un caractère, mais vous ne modifiez pas la mutabilité de l'objet. En fait, effacer un StringBuilder
est également préférable avec Length
(mais utilisez la méthode Clear()
pour plus de clarté, car c'est ce à quoi ressemble son implémentation):
data.Length = 0;
encore une fois, car cela ne change pas la table de répartition. Pensez-y comme si vous disiez: je ne veux plus reconnaître ces octets. Maintenant, même en appelant ToString()
, il ne reconnaîtra rien au-delà de son Length
, eh bien, il ne le peut pas. C'est un objet modifiable qui alloue plus d'espace que ce que vous lui fournissez, il est simplement construit de cette façon.
Juste utiliser
string.Join(",", yourCollection)
De cette façon, vous n'avez pas besoin de StringBuilder
et de la boucle.
Utilisez ce qui suit après la boucle.
.TrimEnd(',')
ou simplement changer en
string commaSeparatedList = input.Aggregate((a, x) => a + ", " + x)
Que dis-tu de ça..
string str = "The quick brown fox jumps over the lazy dog,";
StringBuilder sb = new StringBuilder(str);
sb.Remove(str.Length - 1, 1);
Je préfère manipuler la longueur du constructeur de chaînes:
data.Length = data.Length - 1;
Je vous recommande de changer votre algorithme de boucle:
Vous devriez utiliser le string.Join
méthode pour transformer une collection d'éléments en une chaîne délimitée par des virgules. Cela garantira qu'il n'y a pas de virgule de début ou de fin, et que la chaîne est construite efficacement (sans chaînes intermédiaires inutiles).
Oui, convertissez-le en chaîne une fois la boucle effectuée:
String str = data.ToString().TrimEnd(',');
Vous avez deux options. Le premier est très facile à utiliser Remove
la méthode est très efficace. La deuxième méthode consiste à utiliser ToString
avec les index de début et de fin ( documentation MSDN )
J'ai aimé utiliser une méthode d'extension StringBuilder.
Le moyen le plus simple serait d'utiliser la méthode Join ():
public static void Trail()
{
var list = new List<string> { "lala", "lulu", "lele" };
var data = string.Join(",", list);
}
Si vous avez vraiment besoin de StringBuilder, coupez la virgule de fin après la boucle:
data.ToString().TrimEnd(',');