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

avec Java Discussion :

éliminer les doublons d'une chaîne de caractères


Sujet :

avec Java

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 128
    Points : 53
    Points
    53
    Par défaut éliminer les doublons d'une chaîne de caractères
    bonsoir!

    j'ai une chaîne de caractères sous forme d'un ensemble de mots séparés par des espaces.
    je veux obtenir une autre chaîne à partir de la première mais qui ne contient pas de doublons.
    est-ce possible?

    merci d'avance !

  2. #2
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    une façon simple consiste à utiliser split pour convertir la string en tableau de string, copier dans un nouveau tableau les éléments de l'ancien qui n'ont jamais été inséré, pour finir recréer un string a partir du nouveau tableau.

    http://download.oracle.com/javase/1....lang.String%29


    il y'a d'autres moyens en jouant avec substring, indexof, matches, replaceAll, mais ça risque d'être plus complexe...
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 128
    Points : 53
    Points
    53
    Par défaut
    merci pour la réponse!

    mais peux-tu me donner un exemple simple avec Split() , qui montre surtout le traitement des doublons

    et merci !

  4. #4
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 128
    Points : 53
    Points
    53
    Par défaut
    au fait, j'ai procédé par un StringTokenizer comme-suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    String texte = "bonjour vous nous bonjour nous nous salut";
     
    			StringTokenizer str = new StringTokenizer(texte);
    			String[] tab = new String[str.countTokens()];
    			int i = 0;
    			while (str.hasMoreTokens()) {
    				tab[i++] = str.nextToken();
    			}
     
    			List<String> list = Arrays.asList(tab);
    			Set<String> set = new HashSet<String>(list);
    			String[] nov_tab = new String[set.size()];
    			set.toArray(nov_tab);
    			String nouv_txt =(Arrays.toString(nov_tab));
    et c'est réglé

  5. #5
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    Citation Envoyé par Nayra Voir le message
    au fait, j'ai procédé par un StringTokenizer comme-suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    String texte = "bonjour vous nous bonjour nous nous salut";
    StringTokenizer str = new StringTokenizer(texte);
    String[] tab = new String[str.countTokens()];
    int i = 0;
    while (str.hasMoreTokens()) {
        tab[i++] = str.nextToken();
    }
    et c'est réglé
    Pour cette partie de code je la ferais comme ça plutôt, résultat identique sans tokenizer et sans boucle.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String texte = "bonjour vous nous bonjour nous nous salut";
    String[] tab = texte.split(" ");
    ou éventuellement test.split("\s+"); si tu souhaite virer les espaces/tabulations/... et saut de ligne au passage.
    http://download.oracle.com/javase/1....ttern.html#sum
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  6. #6
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 128
    Points : 53
    Points
    53
    Par défaut
    bonjour

    j'ai utilisé StringTokenizer car ma chaine de caractères contient en réalité d'autres séparateurs que je dois éliminer et j'ai pas pu réglé la chose avec split().

    par contre, dans une autre partie de mon code, j'ai fait ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    String[] txt = nouv_txt.split("\r");
    			for(int j=0 ; j<txt.length ; j++){
     
    				System.out.println(txt[j]);
     
    			}
    avec: nouv_txt une chaine de caractères qui contient que des mots séparés par un retour chariot, c-à-d que chaque mot est dans une ligne à part.
    j'ai voulu mettre les mots de la chaine dans un tableau, chaque mots dans une case, mais l'affichage de txt[j] ne m'affiche que le dernier mot de la chaine.

    pouvez-vous m'expliquer

    Merci !

  7. #7
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    Citation Envoyé par Nayra Voir le message
    bonjour

    j'ai utilisé StringTokenizer car ma chaine de caractères contient en réalité d'autres séparateurs que je dois éliminer et j'ai pas pu réglé la chose avec split().
    Étonnant split prend un expression régulière en entrée, donc normalement cela permet de définir a peu près n'importe quoi comme séparateur.

    si tu décrit comment sont séparées tes éléments je peux peu être t'aider a construire l'expression régulière.
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 173
    Points : 151
    Points
    151
    Par défaut
    Personnellement j'ai une préférence pour la methode split de String, je la trouve plus pratique,
    Ensuite, pour faire toujours dans le simple, tu convertis ton tableau on java.util.Set, toute sa puissance consiste en ce qu'elle autorise pas les doublons

    Exemple de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    String maPharse = "C'est maPhrase, maPhrase, maPhrase!!"
    String[] tmp = maPhrase.split("\\s");
    Set set  = new HashSet();
    set.addAll(Arrays.asList(tmp));
    Ca doit ressembler à ça!

    il n'y a plus qu'a vérifier que ça renvois le bon nombre!

    J'espère que ça répond à ton besoin

  9. #9
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 128
    Points : 53
    Points
    53
    Par défaut
    split(), ça ne permet pas de générer un tableau à partir d'une chaîne de caractères, en éliminant les délimiteurs passés en expression régulière ?

    si c'est oui, alors pourquoi mon Println() m'affiche uniquement le dernier élément de mon tableau?

    (je précise que mon tableau doit contenir dans chacune de ses cases un mot de la chaîne de caractères, qui contient elle des mots séparés par un \r , c'est ce que j'ai mis en expression régulière)

    je vous ai mal compris peut-être ?!

  10. #10
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 128
    Points : 53
    Points
    53
    Par défaut
    merci amine, je prendrais ça en considération
    mais j'ai réussi à éliminer les doublons.

    mon problème maintenant , c'est dans une autre partie de mon code: comme j'ai expliqué plus haut, je n'arrive pas à afficher tout les éléments de mon tableau après sa génération avec split().
    je crois qu'il me manque quelque chose au niveau de la boucle, mais je n'arrive pas à repérer !

  11. #11
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    Citation Envoyé par Nayra Voir le message
    merci amine, je prendrais ça en considération
    mais j'ai réussi à éliminer les doublons.

    mon problème maintenant , c'est dans une autre partie de mon code: comme j'ai expliqué plus haut, je n'arrive pas à afficher tout les éléments de mon tableau après sa génération avec split().
    je crois qu'il me manque quelque chose au niveau de la boucle, mais je n'arrive pas à repérer !
    avec ce code (repris de la suggestion de amine)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
        String texte = "bonjour vous nous bonjour nous nous salut";
        String[] tab = texte.split("\\s");
     
        for (String s : tab) {
          System.out.println("<" + s + ">" );
        }
     
        Set set  = new HashSet();
        set.addAll(Arrays.asList(tab));
     
        String nouveauTexte = set.toString();
        System.out.println("--->" + nouveauTexte);
     
        // suppression des elements non textuels (pas des mots)
        nouveauTexte = nouveauTexte.replaceAll("\\W+"," "); 
        System.out.println("--->" + nouveauTexte + "<---");
     
        // supression des espaces en debut et fin de chaine
        nouveauTexte = nouveauTexte.trim(); 
        System.out.println("--->" + nouveauTexte  + "<---");
    j'obtiens

    <bonjour>
    <vous>
    <nous>
    <bonjour>
    <nous>
    <nous>
    <salut>
    --->[nous, vous, bonjour, salut]
    ---> nous vous bonjour salut <---
    --->nous vous bonjour salut<---
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

  12. #12
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 128
    Points : 53
    Points
    53
    Par défaut
    merci grandement !
    je vais essayer avec ça

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

Discussions similaires

  1. Supprimer les doublons d'une chaîne de caractères
    Par shakapouet dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/10/2011, 13h21
  2. Effacer les espaces dans une chaîne de caractères
    Par JohnnyWalk dans le forum Débuter avec Java
    Réponses: 16
    Dernier message: 19/07/2007, 14h13
  3. Éliminer les doublons d'une BDD MySQL
    Par sansouna24 dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 21/05/2006, 11h26
  4. [TestStand] Compter les éléments d'une chaîne de caractères
    Par capblans dans le forum Autres langages
    Réponses: 2
    Dernier message: 29/04/2005, 09h29

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