315 votes

Supprime le dernier caractère de la chaîne de caractères

Je récupère beaucoup d'informations dans une liste, liée à une base de données et je veux créer une chaîne de groupes, pour quelqu'un qui est connecté au site web.

J'utilise ceci pour tester mais ce n'est pas dynamique, donc c'est vraiment mauvais :

string strgroupids = "6";

Je veux l'utiliser maintenant. Mais la chaîne retournée est quelque chose comme 1,2,3,4,5,

groupIds.ForEach((g) =>
{
    strgroupids = strgroupids  + g.ToString() + ",";
    strgroupids.TrimEnd(',');
});

strgroupids.TrimEnd(new char[] { ',' });

Je veux supprimer le , après le 5 mais ça ne marche pas du tout.

9 votes

La solution au problème direct est strgroupids = strgroupids.TrimEnd(new char[] { ',' }); mais il y a de meilleures idées ci-dessous.

707voto

sll Points 30638
strgroupids = strgroupids.Remove(strgroupids.Length - 1);

MSDN :

String.Remove(Int32) :

Supprime tous les caractères de cette chaîne de caractères à partir d'une valeur spécifiée. spécifiée et en continuant jusqu'à la dernière position

1 votes

Parfait pour enlever le dernier caractère si vous voulez enlever le dernier caractère. Pour la question de l'OP, le problème ne devrait pas exister si vous ne créez pas de caractère de queue. Consultez la solution de @Øyvind Bråthen si vous êtes dans le même bateau que l'OP.

105voto

Øyvind Bråthen Points 25211

Et si on faisait comme ça

strgroupids = string.Join( ",", groupIds );

A lot nettoyeur.

Il ajoutera tous les éléments à l'intérieur de groupIds avec un ',' entre chaque, mais il ne mettra pas un ',' à la fin.

4 votes

Seulement en C# 4.0. En C# 3.5, vous devrez convertir les groupIds en tableau.

3 votes

Celui-ci va régler le problème de l'OP.

32voto

Andy Johnson Points 4683

Les chaînes de caractères en c# sont immuables. Lorsque dans votre code vous faites strgroupids.TrimEnd(','); o strgroupids.TrimEnd(new char[] { ',' }); le site strgroupids chaîne de caractères n'est pas modifié .

Vous devez faire quelque chose comme strgroupids = strgroupids.TrimEnd(','); à la place.

Pour citer ici :

Les chaînes de caractères sont immuables - le contenu d'un objet chaîne de caractères ne peut être être modifié après la création de l'objet, bien que la syntaxe donne l'impression que syntaxe donne l'impression que vous pouvez le faire. Par exemple, lorsque vous écrivez ce code, le compilateur crée réellement un nouvel objet string pour contenir la nouvelle nouvelle séquence de caractères, et ce nouvel objet est affecté à b. chaîne "h" est alors éligible pour la collecte des déchets.

12voto

nnoor Points 632

Ajouter une méthode d'extension.

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

alors utilisez :

yourString.RemoveLast(",");

0 votes

L'idée de base de créer une méthode d'extension est bonne. Cependant, à mon avis, la méthode mise en œuvre ici est excessive, pour cette utilisation. OP savait que le caractère qu'il voulait était à la fin de la chaîne de caractères, donc aucune raison d'avoir la dépense de recherche pour cette chaîne, via LastIndexOf. Il suffit de prendre la réponse acceptée, et d'en faire une méthode d'extension. Ou généraliser cette réponse, en passant dans int n le nombre de caractères à supprimer à la fin. Deuxièmement, vous testez la longueur zéro, mais cela n'élimine pas toutes les exceptions possibles. Il serait préférable de faire int index = ..LastIndexOf.. alors if (index >= 0) .

0 votes

Troisièmement, le paramètre string character est mal nommé. Quatrièmement, il n'est pas immédiatement évident pour les futurs programmeurs qu'il s'agit de la suppression de caractères à la fin de la chaîne. Oh attendez, ce n'est pas nécessairement ce qu'il fait. Il cherche dans la chaîne. Il pourrait être en train de supprimer quelque part au milieu. Maintenant, le programmeur de maintenance doit examiner toutes les utilisations de la méthode, pour voir ce qui a été essayé d'être accompli. Ce n'est pas une bonne méthode à appeler, pour ce simple besoin de supprimer la fin d'une chaîne. Désolé pour toutes ces critiques ; je le fais pour tous ceux qui adoptent cette méthode, afin qu'ils comprennent.

0 votes

Cinquièmement, dans le contexte de la question, String.TrimEnd serait plus approprié d'utiliser. Mais attendez, cela existe déjà - et a été mentionné dans la question originale et plusieurs autres réponses il y a 3 ans - pas besoin d'inventer une nouvelle méthode ! Quel est l'avantage de votre approche ?

9voto

Kieren Johnstone Points 19499

Supprime les virgules de fin :

while (strgroupids.EndsWith(","))
    strgroupids = strgroupids.Substring(0, strgroupids.Length - 1);

Mais c'est à l'envers, vous avez écrit le code qui ajoute la virgule en premier lieu. Vous devriez utiliser string.Join(",",g) au lieu de cela, en supposant g es un string[] . Donnez-lui un meilleur nom que g aussi !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X