Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1781 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [JAVA] Hastable et boucle

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[JAVA] Hastable et boucle

n°1737664
dantes88
Posté le 27-05-2008 à 11:42:48  profilanswer
 

Bonjour,

 

Je dois parser un document *.txt

 

En ce moment je voudrais faire une hashtable dans une hashtable…et j’ai quelques soucis.

 

Mon document *.txt se présente ainsi :

Code :
  1. blablablablabla blablablablabla blablablablabla
  2. TITI
  3. blablablablabla blablablablabla blablablablabla
  4. blablablablabla blablablablabla blablablablabla
  5. +TUTO
  6. blablablablabla blablablablabla blablablablabla
  7. TUTU
  8. blablablablabla blablablablabla blablablablabla
  9. blablablablabla blablablablabla blablablablabla
  10. +TATI
  11. +TUTA
  12. +TOTU
  13. blablablablabla blablablablabla blablablablabla
  14. TOTO
  15. blablablablabla blablablablabla blablablablabla
  16. blablablablabla blablablablabla blablablablabla
  17. blablablablabla blablablablabla blablablablabla
  18. blablablablabla blablablablabla blablablablabla
  19. blablablablabla blablablablabla blablablablabla
  20. blablablablabla blablablablabla blablablablabla
  21. TITI
  22. blablablablabla blablablablabla blablablablabla
  23. blablablablabla blablablablabla blablablablabla
  24. +TITI
  25. blablablablabla blablablablabla blablablablabla
  26. etc…………
 


Je voudrais donc faire une hashtable « h » où je mettrai en clé « MAJUSCULE » et valeur une hashtable « g »
La hashtable g aurait en clé « + MAJUSCULE » et en valeur blablabla……

  

J’ai fait comme cela :

 
Code :
  1. public static void readThesaurus(String filePath) throws Exception{
  2.  //Je declares mes hashtables:
  3. Hashtable h = new Hashtable();
  4.  Hashtable g = new Hashtable();
  5. //lecture du fichier
  6.  BufferedReader bis = new BufferedReader(new FileReader(filePath));
  7.  String lu = bis.readLine();
  8.  // le problème est dans cette boucle:
  9.  while(lu!= null){
  10.  //majuscule principale: si majusucule et si pas de “+” devant:     if(lu.equals(lu.toUpperCase())&&(!(lu.charAt(0)+"" ).equals("+" ))){    //alors je le met en clé dans mon hashtable h
  11.    h.put(lu.toLowerCase(),g);
  12.   }
  13.  // + majuscule:si preier caractere est “+”:
  14.   if((lu.charAt(0)+"" ).equals("+" )){
  15.  //alors je le met en clé dans mon hashtable g (en valeur je met rien pour l’instant…
  16.    g.put(lu.toLowerCase(),"" );
  17.   }
  18.  lu = bis.readLine();
  19.  }
  20. //je ferme le document    
  21.  bis.close();
  22.  // boucle (qui marche très bien) pour afficher MAJUSULE: + MAJUSUCLE
  23.  for( Iterator i = h.keySet().iterator(); i.hasNext();){
  24.   String key = (String)i.next();
  25.   System.out.print("\n"+key+ ":" );
  26.   for( Iterator j = g.keySet().iterator(); j.hasNext();){
  27.    String key2 = (String)j.next();
  28.    System.out.print("\n"+"\t"+key2);
  29.   }
  30.  }
  31. public static void main(String[] a) throws Exception{
  32. //j’exécute ma méthode pour lister les majuscules du texte
  33. readThesaurus("le chemindudocument.txt" );
  34. }
 

Donc j’ai un problème au niveau de l’affichage car il m’affiche la liste des MAJUSCULES avec toutes les +MAJUSCULES
Au lieu d’avoir juste les +MAJUSCULES qui se situent sous les MAJUSCULES

 

Ce qu’il faut obtenir:
M1 : M1.1, M1.2
M2 : M2.1, M2.2, M2.3
M3 : M3.1, M3.2
Ce que j’obtiens:
M1 : M1.1, M1.2, M2.1, M2.2, M2.3, M3.1, M3.2
M2 : M1.1, M1.2, M2.1, M2.2, M2.3, M3.1, M3.2
M3 : M1.1, M1.2, M2.1, M2.2, M2.3, M3.1, M3.2

 


Merci d'avance

   



Message édité par dantes88 le 27-05-2008 à 16:08:54
mood
Publicité
Posté le 27-05-2008 à 11:42:48  profilanswer
 

n°1737922
fluminis
Posté le 27-05-2008 à 17:31:15  profilanswer
 

Hello,
 
Ton explication n'est pas tres claire.
 
Pourrais-tu mettre dans ton exemple de fichier les M1.1 comme dans l'exemple de resultat ?
 

Code :
  1. Ligne 15:
  2. h.put(lu.toLowerCase(), new Hastable());
  3. Ligne 21:
  4. Hashtable tmp = (Hashtable) h.get(lu.toLowerCase());
  5. tmp.put(lu.toLowerCase(),"" );
  6. Ligne 35:
  7. Hashtable tmp = (Hashtable) h.get(key);
  8. for( Iterator j = tmp.keySet().iterator(); j.hasNext(); ){
  9. ...


 
++
Flu


Message édité par fluminis le 27-05-2008 à 17:31:58

---------------
http://poemes.iceteapeche.com - http://www.simuland.net
n°1738199
dantes88
Posté le 28-05-2008 à 10:43:19  profilanswer
 

Merci de ton aide !
 
J'ai utilisé ta solution en créant une nouvelle hashtable directement dans l' hashtable h.
Du coup j'arrive à faire la boucle !
 
merci beaucoup  :)  :)  
 

Code :
  1. if(lu.equals(lu.toUpperCase())&&(!(lu.charAt(0)+"" ).equals("+" ))){
  2.   currentSecondaires = new Hashtable();
  3.                  currentMedic = lu.toLowerCase();
  4.   h.put(lu.toLowerCase(), currentSecondaires);
  5.   System.out.print("\n** " + lu.toLowerCase());
  6.    }
  7.   }
  8.   else if ((lu.charAt(0)+"" ).equals("+" )){
  9.    currentSecondaires.put(lu.toLowerCase(),"" );
  10.    System.out.print("\n" + "\t+" + lu.toLowerCase());
  11.             }

n°1738264
dantes88
Posté le 28-05-2008 à 12:36:57  profilanswer
 

merci

 

on fait comment pour marquer résolu ???


Message édité par dantes88 le 28-05-2008 à 17:33:54

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [JAVA] Hastable et boucle

 

Sujets relatifs
création archive d'extension bpr avec java?Probleme Boucle "pour" en nombre variable
boucle for[Java/Jsp] Changer valeur d'une zone de saisie ?
Fonctionnement de l'api java comm pour communication avec ports série[Java] Est-il possible de générer un fichier Word ?
Problème installation libraire Java CommunicationEnvironnement "favorable" a java
[SQL Server et Java] Problème avec les datesSortir d'une boucle ou...
Plus de sujets relatifs à : [JAVA] Hastable et boucle


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR