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

Java Discussion :

Rechercher un élément dans plusieurs listes


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2015
    Messages : 136
    Par défaut Rechercher un élément dans plusieurs listes
    Salut,

    Je vais essayer d’être le plus clair

    J'essaye de réaliser un analyseur lexical. J'ai un texte que j'ai découpé avec split et j'ai mis tous les mots dans un tableau. J'ai 5 listes : mots clé, séparateurs, identificateurs, opérateurs, constantes. Je voudrais, qu'à chaque fois qu'il trouve un mot, il le cherche dans les 5 listes et il me donne le mot avec le nom de la liste et son indice dans la liste.

    Par exemple
    public static ( ) public + 1111
    mot clé (0) public
    mot clé (1) static
    séparateur (0) (
    separateur (1) )
    mot clé (0) public
    opérateur (0) +
    constante (0) 1111

    Pour l'indice ça dépend de comment j'ai rempli ma liste

    J'ai essayé avec ça
    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
    22
     
    for(int i=0; i<tabmot.length;i++){
    			System.out.println(tabmot[i]);
     
    			if((a1.contains(tabmot[i])) ){
    					System.out.println("mot clé " + i + " = " + a1.get(i));
    			}	else if ((a2.contains(tabmot[i]))) 
    						 System.out.println("separateurs " + i + " = " + a2.get(i));
    			else			if ((a3.contains(tabmot[i])))
    									System.out.println("operateur " + i + " = " + a3.get(i));
     
    			else if ((a7.contains(tabmot[i])))
    											System.out.println("identificateurs " + i + " = " + a5.get(i));
    			else							if	 ((a5.contains(tabmot[i])))
     
    											System.out.println("constantes " + i + " = " + a7.get(i));
     
     
     
     
     
    			 }

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Si list.contains(x) répond true si x se trouve dans list, ou false sinon, tu as aussi list.indexOf(x) qui retourne -1 si x n'est pas dans la liste, sinon la position de x dans la liste.

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    f((a1.contains(tabmot[i])) ){
        System.out.println("mot clé " + tabmot[i] + ", position= " + a1.indexOf( tabmot[i]) )  );
    }	else if ((a2.contains(tabmot[i]))) 
       /*...*/
    Ou le faire seulement avec indexOf
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int indexa1 = a1.indexOf(tabmot[i]);
    if ( indexa1>=0 ) {
        System.out.println("mot clé " + tabmot[i] + ", position= " + indexa1 )  );
    }	else { 
       /*...*/
    Tu peux mettre tes listes dans une Map aussi, avec pour clef le nom
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Map<String, List<String>> listes = new HashMap<>();
    listes.put("mot clé", a1);
    listes.put("sérateurs", a2);
    /**...**/
    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
    public class ListePosition {
         private final String nom;
         private final int index;
         public ListePosition(String nom, int index) {
             this.nom=nom;
             this.index=index;
         }
         public String getNomListe() {
             return nom;
         }
         public int getIndexDansLaListe() {
             return index;
         }
         public static Optional<ListePosition> chercher(Map<String, List<String>> map, String mot) {
               return map.entrySet()
                         .stream()
                         .filter(e-> e.getValue().contains(mot))
                         .map(e-> new ListePosition(e.getKey(), e.getValue().indexOf(mot))
                         .findFirst();
         } 
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Optional<ListePosition> position = ListePosition.chercher(listes, tabmot[i]);
    if ( position.isPresent() ) {
        position.ifPresent(p-> System.out.printf("Mot %s  trouvé dans la liste %s en position %d%n", tabmot[i], p.getNomListe(), p.getIndexDansLaListe()+1)); 
    }
    else {
       System.out.println(tabmot[i]+ " : mot introuvable " );
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2015
    Messages : 136
    Par défaut
    merci beaucoup joel ça marche
    par-contre j'ai voulu essayer avec le map
    y a une erreur qui s'affiche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    ArrayList a1 = new ArrayList();
        ArrayList a2 = new ArrayList();
        ArrayList a3 = new ArrayList();
        ArrayList a7 = new ArrayList();
        ArrayList a5 = new ArrayList();
        ArrayList a6 = new ArrayList();
     
    	Map<String, List<String>> listes = new HashMap<>();
    	listes.add("mot clé",a1);
    	listes.add("sérateurs",a2);
    the method add(String,Arraylist) is undifined for the type Map<String, List<String>>!!!
    j'ai pas fais de bêtise j’espère ! ?

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par abbescr7 Voir le message
    the method add(String,Arraylist) is undifined for the type Map<String, List<String>>!!!
    j'ai pas fais de bêtise j’espère ! ?
    Oups ! Coquille de ma part : c'est put au lieu de add
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2015
    Messages : 136
    Par défaut
    y q toujours des erreur !
    si ça te dérange pas tu peux m'aider je suis nouveau sur java
    si je dis pas de bêtise
    je dois ajouter une nouvelle classe ListePosition ou bien je met ce code dans la même classe ou y toute mes liste !!! y a beaucoup d'erreur Public ListePosition .....

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Oui tu dois faire une nouvelle classe ListePosition. En classe interne, il faudrait qu'elle soit public static, autant la faire à part.

    Tu peux avoir des erreurs dans la méthode chercher() si tu es en Java 7 et pas Java 8, parce que j'utilise des notions qui n'existent que en Java 8 (les streams et les lambdas).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

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

Discussions similaires

  1. Réponses: 22
    Dernier message: 13/09/2013, 14h20
  2. Sélectionner plusieurs éléments dans une liste
    Par morgan47 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 16/11/2011, 11h16
  3. Réponses: 27
    Dernier message: 29/08/2011, 09h13
  4. Problème de recherche des éléments dans une liste.
    Par amine1980 dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 09/04/2011, 23h34
  5. Recherche d'un élément dans une liste triée (vitesse)
    Par Rodrigue dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 18/05/2006, 09h23

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