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

Langage Java Discussion :

[Débutant] Extraction du texte d'un fichier html avec StringTokenizer


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 30
    Points : 12
    Points
    12
    Par défaut [Débutant] Extraction du texte d'un fichier html avec StringTokenizer
    Bonsoir à tous,

    Je suis sur l'écriture d'un programme permettant d'extraire le texte d'un fichier html et l'affiche sur la sortie standard. Ce fichier est lu depuis l'entrèe standard System.in.read (imposé par mon prof !) et je dois utiliser la classe StringTokenizer pour sa fonction de délimitation.

    Le fichier html est du genre :
    <html>
    <head>
    <title>mots à filtrer</title>
    etc.

    Voici ce que j'ai pu produire :

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    import java.io.*;
    import java.util.*;
     
    public class filtrage_texte
    {
     
    	public static void main(String[] args)
    	{
    		int entier = 0; // parameter initialization
    		StringBuffer sb = new StringBuffer(); // buffer creation
     
    		System.out.println(" ");
     
    		while (entier!=-1) // condition
    		{
    				try
    				{
    					entier=System.in.read(); // reading
    					sb.append((char)entier); // characters chains adding
    				}
    				catch (IOException e)
    				{
    					System.out.println(e.toString()); // error message displaying in case of error
    				}
    		}
     
    		StringTokenizer st = new StringTokenizer(sb.toString(),"<>");
    		String token = null;
     
    		while (st.hasMoreTokens())
    		{
    			token = st.nextToken();
    			if (!token.endsWith(">"))
    			{
    				System.out.print(token);
    			}
    		}
    		System.out.println(" ");
    	}
     
    }
    Ce cde ne me donne pas encore ce que je souhaite mais j'ai deux requêtes à vous soumettre :

    1. Pouvez-vous m'indiquer si je suis sur la bonne voie et me donner quelques indices ? je ne cherches pas de solution toute faite !
    2. La partie "lecture" fonctionne bien, mais j'ai systèmatiquement un caractère "?" qui vient se greffer au niveau du dernier caractère affiché, quelqu'un peut me dire pourquoi ?
      ex :
      ...
      /body
      /html?


    Merci d'avance et bonne soirée à tous.

  2. #2
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    311
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 311
    Points : 318
    Points
    318
    Par défaut
    Salut,

    Tu chopes un "?" car tu testes la valeur d' "entier" avant de l'affecter, donc lors de ta dernière lecture, entier vaut "-1" mais tu le mets quand même dans ton StringBuffer.

    Pour corriger ça, il faut mettre la lecture dans le while.

    De même, pour ne pas tester le "endsWith", tu peux demander au StringTokenizer de ne pas te retourner le séparateur en lui passant "false" en 3è paramètre :

    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
     
    public class filtrage_texte {
      public static void main(String[] args) {
        try {
          while ((entier = System.in.read()) != -1) // condition
          {
            sb.append((char) entier); // characters chains adding
          }
        } catch (Exception e1) {
          e1.printStackTrace();
        }
     
        StringTokenizer st = new StringTokenizer(sb.toString(), "<>", false);
        String token = null;
     
        while (st.hasMoreTokens()) {
          token = st.nextToken();
          System.out.print(token);
        }
        System.out.println(" ");

  3. #3
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 30
    Points : 12
    Points
    12
    Par défaut
    Bonjour,

    Merci beaucoup pour ces corrections, je teste tout cela et je reviens !

    Bonne journée.

  4. #4
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 30
    Points : 12
    Points
    12
    Par défaut
    Bonjour DevTeam_,

    Merci pour ton aide : je n'ai effectivement plus le point d'interrogation à la fin de l'affichage de ce que le programme lit.

    Néanmoins, je ne saisi pas pourquoi je devrait ajouter "false" dans le StringTokenizer, pourrais-tu préciser pourquoi ?

    Je me permet de te rappeller que je ne dois afficher que les mots qui ne sont pas des balises HTML (compris en tre "<" et ">").

    Bon après-midi !

  5. #5
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 30
    Points : 12
    Points
    12
    Par défaut
    Bonjour,

    Rien à faire, je ne parviens toujours pas à filtrer les balises, quelqu'un pourrait me filer un petit coup de main ?

    Bon après-midi.

  6. #6
    Membre expérimenté
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 011
    Points : 1 375
    Points
    1 375
    Par défaut
    Tu peux lire caractère par caractère et définir si tu dois oui ou non afficher ce caractere:
    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 s = "<html><head><title>Mon titre</title></head><body>salut</body></html>";
    boolean shouldShowChar = true;
     
    for (int i = 0; i < s.length(); i++) {
       char c = s.charAt(i);
     
       if (c == '<') {
          shouldShowChar = false;
       } else if (c == '>') {
          shouldShowChar = true;
       } else if (shouldShowChar) {
          System.out.print(c);
       }
    }
    Après à toi d'adapter à ton besoin.

  7. #7
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 30
    Points : 12
    Points
    12
    Par défaut
    Bonjour muad'dib,

    Merci beaucoup pour ta réponse mais en fait, l'utilisation d'un StringTokenizer est impérative (et imposée). Oui, je sais...

  8. #8
    Membre expérimenté
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 011
    Points : 1 375
    Points
    1 375
    Par défaut
    Ben dans ce cas tu adaptes
    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
          String s = "<html><head><title>Mon titre</title></head><body>salut</body></html>";
          boolean shouldShowTok = true;
     
          StringTokenizer st = new StringTokenizer(s, "<>", true);
     
          while (st.hasMoreTokens()) {
             String tok = st.nextToken();
     
             if (tok.equals("<")) {
                shouldShowTok = false;
             } else if (tok.equals(">")) {
                shouldShowTok = true;
             } else if (shouldShowTok) {
                System.out.println(tok);
             }
          }

  9. #9
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 30
    Points : 12
    Points
    12
    Par défaut
    cela fonctionne du tonnerre, merci beaucoup !

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 05/05/2010, 10h18
  2. Extraction du text dans un fichier html
    Par projetGTR dans le forum Web
    Réponses: 15
    Dernier message: 20/09/2007, 11h30
  3. Extraction de texte dans une page HTML
    Par ninox_ dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 02/05/2007, 17h29
  4. [débutant]extraction des données d'un fichier xml simple
    Par ekram dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 14/03/2007, 12h24
  5. Extraction de texte dans un fichier
    Par chris91 dans le forum Langage
    Réponses: 4
    Dernier message: 18/08/2006, 16h09

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