2010-12-13 25 views
9

Je suis en train d'écrire un programme qui lit et sépare les courriels spam et jambon. Maintenant je le lis en utilisant la classe bufferedreader de java. Je suis en mesure d'éliminer toute méthode des caractères indésirables comme « (» ou « » etc, en utilisant replaceAll(). Je veux supprimer les balises HTML aussi, y compris & ampli. Comment y parvenir !?supprimer les balises html de la chaîne en utilisant java

grâce

EDIT: Merci pour la réponse, mais je suis déjà un regex, comment combiner mes deux besoins et mis en un Heres le regex je suis maintenant en utilisant

lines.replaceAll("[^a-zA-Z]", " ") 

note:.. Je reçois des lignes de un fichier txt Autres suggestions plss ?!

+0

J'ai essayé Jsoup..but son erreur ne working..no complile, ses tout simplement pas de travail .. – Maverick

+1

Sujets similaires http://stackoverflow.com/questions/1699313/how-to-remove-html -tag-in-java http://stackoverflow.com/questions/240546/removing-html-from-a-java-string –

Répondre

35

Peut-être que cela fonctionnera:

String noHTMLString = htmlString.replaceAll("\\<.*?>",""); 

Il utilise regular expressions pour supprimer toutes les balises HTML dans une chaîne. Plus précisément, il supprime toutes les balises XML d'une chaîne. Donc < 1234> sera supprimé même s'il ne s'agit pas d'une balise HTML valide. Mais c'est bon pour la plupart des intentions et des buts.

Espérons que cela aide.

+0

Un second appel, comme 'replaceAll (" &.*?; "," ")' prendrait l'entité les références. Bien qu'il me semble étrange que l'on veuille simplement les supprimer, plutôt que de les traduire de nouveau dans les caractères qu'ils représentent. –

+0

Solution très utile et puissante. –

+4

Soyez prudent avec regex, ce n'est pas une solution complète. Il remplace aussi les caractères non désirés -> en utilisant cette expression pour une chaîne comme "a d" donne "a d". –

3

Vous voulez faire un peu léger parsing pour dépouiller le code HTML:

String extractText(String html) throws IOException { 
    final ArrayList<String> list = new ArrayList<String>(); 

    ParserDelegator parserDelegator = new ParserDelegator(); 
    ParserCallback parserCallback = new ParserCallback() { 
     public void handleText(final char[] data, final int pos) { 
      list.add(new String(data)); 
     } 
     public void handleStartTag(Tag tag, MutableAttributeSet attribute, int pos) { } 
     public void handleEndTag(Tag t, final int pos) { } 
     public void handleSimpleTag(Tag t, MutableAttributeSet a, final int pos) { } 
     public void handleComment(final char[] data, final int pos) { } 
     public void handleError(final java.lang.String errMsg, final int pos) { } 
    }; 
    parserDelegator.parse(new StringReader(html), parserCallback, true); 

    String text = ""; 

    for(String s : list) { 
     text += " " + s; 
    } 

    return text; 
} 
8

JSOUP

public static String html2text(String html) { 
    return Jsoup.parse(html).text(); 
} 
+1

Pour les utilisateurs de maven, le lien vers les repos de maven pour la dernière version: https://mvnrepository.com/artifact/org.jsoup/jsoup – Ben

-1

import java.io. *;

public class Html2TextWithRegExp { 


public static void main (String[] args) throws Exception{ 
StringBuilder sb = new StringBuilder(); 
BufferedReader br = new BufferedReader(new FileReader("java-new.html")); 
String line; 
while ((line=br.readLine()) != null) { 
    sb.append(line); 
    // or 
    // sb.append(line).append(System.getProperty("line.separator")); 
} 
String nohtml = sb.toString().replaceAll("\\<.*?>",""); 
System.out.println(nohtml); 
} 
} 
+0

Pourquoi avez-vous créé un constructeur vide? –