web-dev-qa-db-fra.com

Pourquoi string.TrimEnd ne supprime pas que le dernier caractère de la chaîne

J'ai des ficelles comme ci-dessous

2,44,AAA,BBB,1,0,,,

Alors maintenant, je veux supprimer uniquement la dernière virgule dans la chaîne ci-dessus. Donc, je veux une sortie en tant que 

2,44,AAA,BBB,1,0,,

J'ai décidé d'utiliser TrimeEnd comme ci-dessous

str.ToString.TrimEnd(',')

Mais il a supprimé toutes les virgules après 0. Donc, je reçois la sortie ci-dessous

2,44,AAA,BBB,1,0

Pourquoi supprime-t-il les 3 virgules après 0? J'ai juste besoin de supprimer le dernier caractère de la chaîne

12
James

Pourquoi supprime-t-il les 3 virgules après 0?

Parce que c'est ce que documenté faire:

Valeur de retour:
La chaîne qui reste après toutes les occurrences des caractères du paramètre trimChars est supprimée de la fin de la chaîne en cours.

Si vous souhaitez uniquement supprimer le dernier caractère, vous pouvez utiliser:

if (str.EndsWith(","))
{
    str = str.Substring(0, str.Length - 1);
}

Ou équivalent:

if (str.EndsWith(","))
{
    str = str.Remove(str.Length - 1);
}
34
Jon Skeet

C'est prévu. String.TrimEnd Supprime all les dernières occurrences d'un ensemble de caractères spécifié dans un tableau à partir de l'objet String actuel

La méthode TrimEnd(char[] trimChars) supprime de la chaîne actuelle tous les caractères de fin figurant dans le paramètre trimChars. L'opération de trim s'arrête lorsque le premier caractère qui n'est pas dans trimChars est rencontré à la fin de la chaîne

Utilisez ceci à la place:

str = str.EndsWith(",") ? str.Substring(0, str.Length - 1) : str;
4
codingbiz

Vous pouvez utiliser ceci:

string s = "2,44,AAA,BBB,1,0,,,";
s = s.Remove(s.Length-1, 1);
1
Vishal

Rappelez-vous s'il vous plaît, le TrimEnd () n'est pas une fonction inplace. Vous devez réaffecter son résultat à str:

str = str.TrimEnd(',')
0
m.r226