[JAVA] Hastable et boucle

Hastable et boucle [JAVA] - Java - Programmation

Marsh Posté le 27-05-2008 à 11:42:48    

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
Reply

Marsh Posté le 27-05-2008 à 11:42:48   

Reply

Marsh Posté le 27-05-2008 à 17:31:15    

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
Reply

Marsh Posté le 28-05-2008 à 10:43:19    

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.             }

Reply

Marsh Posté le 28-05-2008 à 12:36:57    

merci

 

on fait comment pour marquer résolu ???


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

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed