IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[C#] Quelle fonction permet de supprimer tous les blancs d'une chaine ?


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 560
    Par défaut [C#] Quelle fonction permet de supprimer tous les blancs d'une chaine ?
    Salut,

    Je voulais juste savoir s'il existait une fonction toute faite permettant de supprimer tous les blancs d'une chaine, afin d'éviter de réimplémenter cela si cela existe déjà.

    Par exemple, retirer les blancs suivants :

    ma_chaine__n'est__pas_très_longue

    Donner : machainen'estpastrèslongue

    Merci pour toute info supplémentaire.

  2. #2
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Par défaut
    Salut .

    regarde du coté de la fonction Trim de la classe string.

  3. #3
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Citation Envoyé par dev01
    regarde du coté de la fonction Trim de la classe string.
    La méthode Trim remplace les occurences de caractères se situant en début et en fin de chaîne uniquement

    Dans le cas présent, la méthode Replace est plus appropriée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    string maChaine = "ma chaîne n'est pas très longue";
    string maNouvelleChaine = maChaine.Replace(" ", string.Empty);
    Edit : grilled ^^

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Par défaut
    S'il fait supprimer tous les blancs (donc pas uniquement les espaces), le plus simple est d'utiliser les expressions régulières (namespace System.Text.RegularExpressions)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string nouvelleChaine = Regex.Replace(maChaine, @"\s+", "");

  5. #5
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Par défaut
    Citation Envoyé par StormimOn
    La méthode Trim remplace les occurences de caractères se situant en début et en fin de chaîne uniquement

    Dans le cas présent, la méthode Replace est plus appropriée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    string maChaine = "ma chaîne n'est pas très longue";
    string maNouvelleChaine = maChaine.Replace(" ", string.Empty);
    Edit : grilled ^^
    oups honte sur moi j'ai pas fait gaffe ...

  6. #6
    Membre Expert
    Avatar de Merlin
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2002
    Messages
    524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Mars 2002
    Messages : 524
    Par défaut
    tu sais, "réimplémenter" c'est un bien grand mot, il faut moins de lignes de code pour faire ce que tu veux que ton message pour demander de l'aide...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    public string DeleteSpace(string laChaine)
    { string tmp; foreach (char c in laChaine) if (c!=' ') tmp+=c; return tmp; }
    sinon, en cherchant bien dans la classe string, tu aurais pu voir la fonction Replace().
    Pour virer tous les espaces :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    machaine = machaine.Replace(" ","");
    tout simplement...

  7. #7
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Par défaut
    Citation Envoyé par Merlin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    public string DeleteSpace(string laChaine)
    { string tmp; foreach (char c in laChaine) if (c!=' ') tmp+=c; return tmp; }
    [/code] tout simplement...
    Salut,
    ça (tmp+=c) c'est un des trucs typiques à éviter car tmp étant un string, faire tmp=... alloue de la mémoire à chaque fois. Pour peu que ta fonction DeleteSpace soit régulièrement sollicitée ça va être lent.

    utiliser StringBuilder c'est bien

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 560
    Par défaut
    OK merci pour ces informations, qu'est ce qui est plus rapide c'est utiliser les expressions régulières ou la fonction "Replace" (à laquelle je n'ai d'ailleurs pas pensé) ?

  9. #9
    Membre Expert
    Avatar de Merlin
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2002
    Messages
    524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Mars 2002
    Messages : 524
    Par défaut
    Citation Envoyé par abelman
    Salut,
    ça (tmp+=c) c'est un des trucs typiques à éviter car tmp étant un string, faire tmp=... alloue de la mémoire à chaque fois. Pour peu que ta fonction DeleteSpace soit régulièrement sollicitée ça va être lent.
    utiliser StringBuilder c'est bien
    Non, il ne faut pas être extrémiste comme ça
    Dans l'exemple présent la longueur des chaînes à traiter semble (sans indication contraire) relativement faible. Et dans un tel cas l'utilisation d'un StringBuilder n'est pas forcément à conseiller systématiquement et peut amener à des contre-performances.
    Entre les cas où string s'impose et ceux où StringBuilder s'impose, il y a tout un tas de cas limites qui, si on cherche l'optimisation à tout prix, ne peuvent être tranchés qu'avec un profiler en fait.
    De fait dès qu'on fait un string += 'bla'; c'est pas toujours rentable d'utiliser un StringBuilder à la place.

  10. #10
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106
    Par défaut
    Je ne suis pas extrémiste

    Je pense quand même que même si la taille de la chaine est petite, si on doit refaire l'opération un certain nombre de fois (typiquement dans une boucle), le StringBuilder est plus performant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    for (int i=0; i<1000; i++)
    {
        mastring += "bla"; // equivaut à mastring = new string(mastring + 'bla');
    }
     
    // Sb étant un StringBuilder, ce code est plus rapide
    for (int i=0; i<1000; i++)
    {
        sb.Append("bla"); 
    }
    Par contre si on le fait juste une fois, effectivement je suis d'accord avec toi

  11. #11
    Rédacteur
    Avatar de abelman
    Inscrit en
    Février 2003
    Messages
    1 106
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 1 106

  12. #12
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par abelman Voir le message
    utiliser StringBuilder c'est bien
    Dans le cas précis, StringBuilder qui est beaucoup plus performante en général que la manip de chaine "à la mimine" n'apporte strictement rien (au contraire).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Supprimer tous les blancs dans une chaine de caractères
    Par joel74 dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 20/02/2014, 16h19
  2. Supprimer tous les accents d'une chaine
    Par smarties dans le forum Qt
    Réponses: 7
    Dernier message: 26/12/2010, 14h23
  3. Réponses: 3
    Dernier message: 17/03/2010, 14h50
  4. [PHP 4] Petit Script Qui Permet De Supprimer Tous Les Fichiers D'un Dossier
    Par The_Haunted dans le forum Langage
    Réponses: 5
    Dernier message: 03/01/2009, 15h15
  5. Supprimer TOUS les espaces d'une chaine
    Par tavekapaclike1er dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 24/12/2005, 15h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo