12
votes

Supprimer plusieurs types de caractères de fin de chaîne

J'ai une boucle qui construit des champs d'adresse, certains de ces champs peuvent être vides à la fin de la chaîne xxx

ma sortie est xxx

Comment puis-je supprimer la fuite "," de la chaîne?


1 commentaires

Non, tu ne le fais pas. Vous avez une boucle qui provoque une erreur ArgumentOntofRangeException ...


7 Réponses :


2
votes

La méthode statique Trimends de la chaîne permet de spécifier quels caractères doivent être coupés.

Toutefois, dans votre cas, il serait logique de vérifier dans la boucle pour que vous ayez des emplacements vides, et à la fin placez une chaîne résultante avec string.join (séparateur de chaîne)


0 commentaires

2
votes

Si vous voulez supprimer quelque chose que vous avez ajouté, ne les ajoutez pas en premier lieu. En outre, le type stringbuilder code> est mieux adapté à la concaténation de plusieurs chaînes, car il est beaucoup plus efficace de mémoire.

StringBuilder sb = new StringBuilder();

for (int i = 0; i < list.Count; i++)
{
    string rowValue = list[iRow];
    if (!string.IsNullOrEmpty(rowValue))
    {
        sb.Append(rowValue);
        sb.Append(", ");
    }    
}

// use sb.ToString() to obtain result


1 commentaires

Ce code produira un "", ", vous devez appeler SB.ReMove (Sb.Length-Longueur-2, 2) après la boucle.



8
votes

Vous devez également éviter d'utiliser des chaînes dans votre cas, utilisez plutôt StringBuilder. Évitez également d'utiliser la mise en forme de senseles -Juste [Irow] est une meilleure option.

Essayez quelque chose comme ça à la place: P>

string result = string.Join(", ", 
                  list.Where(s => !string.IsNullOrEmpty(s)).ToArray());


0 commentaires

1
votes

Je déteste faire des hypothèses, mais je le ferai parce que vous voulez que vous souhaitiez préserver les "lacunes" jusqu'à ce que vous arriviez à la fin, auquel cas vous devriez utiliser Trimend. Sinon, utilisez l'une des autres options pour éviter d'ajouter les valeurs vides en premier lieu.

plus précisément si votre sortie pourrait ressembler à:

asd, aaa, qwe, 123123 , quelque évalle, ,

Ensuite, vous devrez faire boucle et utiliser Trimend.

Sinon, si vous pouvez réduire les champs, excluez les VIDES.

asd, aaa, qwe, 123123, quelqueévalie


0 commentaires

28
votes
returnValue = returnValue.TrimEnd(' ', ',');

2 commentaires

Le paramètre sur Trimend est un paramorrare que vous n'avez pas besoin d'un nouveau caractère [] - retourvalue = retourvalue.trimend ('', ',');


@NESCIO Merci, je pense que dans la méthode Split, j'utilise régulièrement une matrice de caractère pour dépouiller les valeurs vides, donc j'ai écrit ici par erreur.



0
votes

Essayez ceci:

List<string> list = new List<string>(
    new string[]{"asd", "aaa", "qwe", "123123", "", null, "", null, ""});
return String.Join(", ", list.Where(i => !String.IsNullOrEmpty(i)).ToArray());


0 commentaires

0
votes

Je me rends compte que cela est tout à fait illisible et est gaspillé mais (sans linq): xxx


1 commentaires

Pas une bonne solution. Moyen le plus simple de faire ce yonstring.trimend (',', '');