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

API standards et tierces Java Discussion :

fonction pour enlever des tags


Sujet :

API standards et tierces Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2004
    Messages : 25
    Points : 20
    Points
    20
    Par défaut fonction pour enlever des tags
    Bonjour j'essai d'ecrire une fonction qui élimine les balises html ca donne ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public String recur(String rose){
     
               	                     int first = rose.indexOf("<");
               	                     int last  = rose.indexOf(">");
               	                     if((last>first)&&(last>=0)&&(first>=0)){
               	                                 rose=rose.replaceAll(rose.substring(first,last),"");
               	                                 recur(rose);
               	                                            }
               	                               return rose;
               	                               }
    je l'appelle avec comme ceci
    contenu= recur(contenu);
    mais je sais pas pourquoi elle elimen la premiére balise en me laissant un > et ensuite elle s'arrette
    j'ai éssayé de rajouter un +1 ici:
    rose.substring(first,last+1) mais ca change pas grand chose elle elimine la premiere balise completement mais ne poursuit pas son travail ou est le probleme??? aidez moi...merci

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 94
    Points : 92
    Points
    92
    Par défaut
    bonjour sunp,
    je pense que le problème viens des conditions testées dans if(...), mais d'abord,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // ceci laisse le caractère '>' dans rose, faisant qu'au 2 ième appel 
    //(récursif) tu as dans rose une séquence > ... < ... > et là last < first
    rose=rose.replaceAll(rose.substring(first,last),""); 
    // il faut donc écrire il me semble :
    rose=rose.replaceAll(rose.substring(first,last + 1),"");
    ensuite revois if(...), et si tu ne vois pas ce qui cloche, rien ne t'empèche de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if(tes conditions){
      /* traitement */
      JOptionPane.showMessageDialog(null,"un passage dans recur, rose   devient\n" + rose + "/");
    } else {
      JOptionPane.showMessageDialog(null,"un passage dans recur, rose   demeure\n" + rose + "\nfirst = " + first + "\nlast = " + last);
     
    }
    çà debug ...
    A+
    [/code]

  3. #3
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Le code suivant fonctionne, mais je n'ai pas testé (de loin) tous les cas.
    Par exemple si le HTML est malformé.

    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
     
    public class Test {
     
    	public static String recur(String rose){
            System.out.println("rose="+rose);
            int first = rose.indexOf("<");
            int last  = rose.indexOf(">");
            System.out.println("first="+first);
            System.out.println("last="+last);
            if(first>=0 && last>0){
            	rose=rose.replaceAll(rose.substring(first,last+1),"");
            	rose=recur(rose);
            }
     
            return rose;
        }
     
    	public static void main(String[] args) {
     
    		  System.out.println("Result="+recur("<html><head>sasasas</head><body></body></html>"));
     
        }
    }
    Steve Hostettler
    est ton ami(e) et le tag aussi.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 94
    Points : 92
    Points
    92
    Par défaut
    en lisant ze_key, un truc saute au yeux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    recur(rose) et rose = recure(rose) ne sont pas vraiment la même chose,
    comme rose.substring(0,5) et rose =  rose.substring(0,5);
    A+

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2004
    Messages : 25
    Points : 20
    Points
    20
    Par défaut .-( marce tjs pas
    CA me fait une stackoverflow mais je vois vraiment pas pourquoi???

  6. #6
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut Re: .-( marce tjs pas
    Salut,

    Citation Envoyé par sunp
    CA me fait une stackoverflow mais je vois vraiment pas pourquoi???

    Soit ta chaine est trop grande, soit il y a une erreur dans ton algo qui fait que ca tourne en boucle...

    Sinon comme replaceAll() utlise les regexp, pourquoi ne pas les utiliser, ce qui donne tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String resultat = string.replaceAll("<[^>]*>", "");
    a++

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2004
    Messages : 25
    Points : 20
    Points
    20
    Par défaut merci
    ahhh oui ca c'est fort meci infiniment c'est bien mieux que cette fonction recursive....

    Par contre je comprens pas trop comment ca marche??????? quelqu'un peut m'expliquer

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 94
    Points : 92
    Points
    92
    Par défaut
    oui, sunp, c'est bien mieux et c'est pas trop difficile à comprendre, je découvre comme toi :
    Sinon comme replaceAll() utlise les regex, pourquoi ne pas les utiliser, ce qui donne tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String resultat = string.replaceAll("<[^>]*>", "");
    en d'autre termes :
    remplace toutes les séquences de caractères "<[^>]*>" par ""
    sequence "<[^>]*>" : une séquence commençant par le caractère < auquel succède une sequence [
    de caractères différents ^ de> ] et de taille indeterminée * qui finit par le caractère >...


    explications par exemple :
    http://cyberzoide.developpez.com/java/regex/regex.pdf

    A+

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2004
    Messages : 25
    Points : 20
    Points
    20
    Par défaut
    J'ai essayé maintenant d'eliminer les balises script et tout ce qui se trouve entre elles comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    contenu = contenu.replaceAll("<scr[^\u00AE]*pt>","");
    ca fonctionne , mais le probleme c'est que si il y en a une au début et une à la fin ben ca élimine tout.... comment faire???

    par exemple si on a un cas comme celui-ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <script="javascript"> blablablablablablablablablablablabla</script>
    <a href=...>Un mot</a>
    <script language="javascript"> blablablablablablablablablablablabla</script>
    La fonction ci dessus va tout remplacer par un vide, et je souhaiterais quand meme garder la balise <a>... que faire une idée? aidez moi svp...

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2004
    Messages : 25
    Points : 20
    Points
    20
    Par défaut aide Expressions regulieres
    quelqu'un pour m'aider please...

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 94
    Points : 92
    Points
    92
    Par défaut
    re,
    je pense qu'il y a une solution : apprendre à maitriser les patterns et expressions régulières, la doc et les liens ne manquent pas et ce sera tout benef pour toi, car tu dois faire une erreur dans la formation de la séquence à remplacer, mais bon j'ai pas essayé non plus ...
    sinon, un bon petit algo pour çà, c'est trés faisable ...
    à demain, là moi dodo.

  12. #12
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Les corrections que j'ai faite à ta fonction ne marche pas?
    Le stack overflow signifie que la condition d'arrêt n'est pas suffisante, peux tu me communiquer ton fichier d'exemple ?

    Dans quel but fais tu cela, peut-être y a t'il plus simple.
    Steve Hostettler
    est ton ami(e) et le tag aussi.

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2004
    Messages : 25
    Points : 20
    Points
    20
    Par défaut
    Si ca marche tres bien ze-key, mais ca laisse le contenu des balises style et script (si c'est pas entre des <!-- -->) ,donc je dois d'abord éliminer les balises script et style, pour style aucun probleme:

  14. #14
    Membre actif

    Inscrit en
    Mai 2002
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 328
    Points : 209
    Points
    209
    Par défaut
    sinon, je crois qu'une lib nommé "jtidy" permet de convertir du xhtml en texte ...

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2004
    Messages : 25
    Points : 20
    Points
    20
    Par défaut
    c'est résolu !!!!merci a vous tous je suis soulagé

    Un excellent tutorial sur les expressions régulières:
    http://www.regular-expressions.info/tutorial.html

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

Discussions similaires

  1. fonction pour récupérer des données xml
    Par jeff29 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/06/2006, 15h46
  2. [RegEx] Problème pour enlever les tags javascript d'une source HTML
    Par Easyweb dans le forum Langage
    Réponses: 4
    Dernier message: 25/02/2006, 02h10
  3. fonction pour charger des iframes
    Par rib dans le forum Langage
    Réponses: 2
    Dernier message: 03/12/2005, 14h27
  4. Réponses: 6
    Dernier message: 22/11/2005, 17h08
  5. Réponses: 5
    Dernier message: 07/07/2004, 16h05

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