2010-03-21 7 views
4

J'essaie de supprimer tous les éléments HTML d'une chaîne. Malheureusement, je ne peux pas utiliser les expressions régulières car je développe sur la plate-forme Blackberry et les expressions régulières ne sont pas encore supportées.Java supprimer HTML à partir de chaîne sans expressions régulières

Existe-t-il un autre moyen de supprimer le HTML d'une chaîne? J'ai lu quelque part que vous pouvez utiliser un analyseur DOM, mais je ne pouvais pas en trouver beaucoup.

Texte HTML:

<![CDATA[As a massive asteroid hurtles toward Earth, NASA head honcho Dan Truman (<a href="http://www.netflix.com/RoleDisplay/Billy_Bob_Thornton/20000303">Billy Bob Thornton</a>) hatches a plan to split the deadly rock in two before it annihilates the entire planet, calling on Harry Stamper (<a href="http://www.netflix.com/RoleDisplay/Bruce_Willis/99786">Bruce Willis</a>) -- the world's finest oil driller -- to head up the mission. With time rapidly running out, Stamper assembles a crack team and blasts off into space to attempt the treacherous task. <a href="http://www.netflix.com/RoleDisplay/Ben_Affleck/20000016">Ben Affleck</a> and <a href="http://www.netflix.com/RoleDisplay/Liv_Tyler/162745">Liv Tyler</a> co-star.]]> 

Texte sans HTML:

Comme un astéroïde massif dévale vers la Terre, la tête de la NASA grand patron Dan Truman (Billy Bob Thornton) éclot un plan pour diviser la roche mortelle deux avant d'anéantir la planète entière, en appelant Harry Stamper (Bruce Willis) - le meilleur foreur de pétrole du monde - à la tête de la mission. Avec le temps qui s'écoule rapidement, Stamper assemble une équipe de crack et s'envole dans l'espace pour tenter la tâche délicate. Ben Affleck et Liv Tyler co-star.

Merci!

+0

Est-ce que 'Swing' est disponible dans l'API Blackberry? Pour plus d'astuces, consultez la réponse acceptée de cette question: http://stackoverflow.com/questions/240546/removing-html-from-a-java-string – BalusC

+0

Malheureusement, Swing n'est pas disponible dans l'API BlackBerry ... – littleK

Répondre

4

Il y a beaucoup de nuances à l'analyse syntaxique HTML dans la nature, l'un des plus plus drôle étant que beaucoup de pages là-bas ne suivent aucune norme. Cela dit, si tout votre code HTML va être aussi simple que votre exemple, quelque chose comme cela est plus que suffisant:

char[] cs = s.toCharArray(); 
    StringBuilder sb = new StringBuilder(); 
    boolean tag = false; 
    for (int i=0; i<cs.length; i++) { 
     switch(cs[i]) { 
      case '<': if (! tag) { tag = true; break; } 
      case '>': if (tag) { tag = false; break; } 
      case '&': i += interpretEscape(cs, i, sb); break; 
      default: if (! tag) sb.append(cs[i]); 
     } 
    } 
    System.err.println(sb); 

interpretEscape() est censé savoir comment convertir HTML échappe, comme &gt; à leurs homologues de caractère , et passez tous les caractères jusqu'à la fin ;.

+0

HTML devrait toujours être assez simple, comme indiqué dans mon exemple. Cela fonctionne pour moi. Merci beaucoup! – littleK

+1

Ça a l'air bien. Vous aurez probablement besoin de le modifier légèrement pour le cependant: le courant passera tout le contenu. – Daniel

1

Si vous pouvez ajouter des pots externes, vous pouvez essayer avec ces deux petites libs:

ils ont tous deux vous permettent à tout dépouiller.

J'utilisé jericho plusieurs fois, pour vous dépouiller de définir un extracteur comme vous l'aimez:

class HTMLStripExtractor extends TextExtractor 
{ 
    public HTMLStripExtractor(Source src) 
    {  
     super(src) 
     src.setLogger(null) 
    } 

    public boolean excludeElement(StartTag startTag) 
    { 
     return startTag.getName() != HTMLElementName.A 
    } 
} 
1

Je vais essayer d'aborder ce l'inverse, créer un arbre DOM à partir du HTML, puis extraire la chaîne de l'arbre:

  • Utilisez une bibliothèque comme TagSoup pour analyser le code HTML tout en le nettoyant pour qu'il soit proche de XHTML.
  • Lorsque vous diffusez le fichier XHTML nettoyé, extrayez le texte de votre choix.
4

Je ne peux pas utiliser des expressions régulières parce que je développe sur la plate-forme Blackberry

Vous ne pouvez pas utiliser des expressions régulières parce que le HTML est un langage récursif et des expressions régulières ne peut pas gérer ceux-ci.

Vous avez besoin d'un analyseur.

Questions connexes