2010-06-28 10 views
5

Fondamentalement, j'ai un fragment HTML avec <br> et <p></p> à l'intérieur. J'ai été en mesure de supprimer tous les balises HTML, mais cela laisse le texte dans un mauvais format.convertir les sauts et les sauts de paragraphe en nouvelle ligne en Java

Je veux quelque chose comme nl2br() en PHP, sauf inverser l'entrée et la sortie et prend également en compte <p> tags. Y a-t-il une bibliothèque pour Java?

+0

connexes: [Suppression HTML à partir d'une chaîne Java] (http://stackoverflow.com/questions/240546/removing-html-from-a-java-string) – miku

Répondre

12

Vous devez essentiellement remplacer chaque <br> par \n et chaque <p> par \n\n. Ainsi, aux points où vous réussissez à les supprimer, vous devez insérer les \n et \n\n respectivement.

Voici un exemple de lancement avec l'aide de l'analyseur syntaxique HTML Jsoup (l'exemple HTML est intentionnellement écrit de telle sorte qu'il est difficile sinon impossible d'utiliser regex pour cela).

public static void main(String[] args) throws Exception { 
    String originalHtml = "<p>p1l1<br/><!--</p>-->p1l2<br><!--<p>--></br><p id=p>p2l1<br class=b>p2l2</p>"; 
    String text = br2nl(originalHtml); 
    String newHtml = nl2br(text); 

    System.out.println("-------------"); 
    System.out.println(text); 
    System.out.println("-------------"); 
    System.out.println(newHtml); 
} 

public static String br2nl(String html) { 
    Document document = Jsoup.parse(html); 
    document.select("br").append("\\n"); 
    document.select("p").prepend("\\n\\n"); 
    return document.text().replace("\\n", "\n"); 
} 

public static String nl2br(String text) { 
    return text.replace("\n\n", "<p>").replace("\n", "<br>"); 
} 

(Note: replaceAll() est inutile que nous voulons juste un simple remplacement CharSequence par CharSequence ici, pas de remplacement regexpattern par CharSequence)

Sortie:

<p>p1l1<br/><!--</p>-->p1l2<br><!--<p>--></br><p id=p>p2l1<br class=b>p2l2</p> 
------------- 


p1l1 
p1l2 



p2l1 
p2l2 
------------- 
<p>p1l1 <br>p1l2 <br> <br> <p>p2l1 <br>p2l2 

Un peu hacky, mais ça marche.

+0

merci. Cela fonctionne pour moi: D – user91954

+0

De rien. – BalusC

3

br2nl et p2nl ne sont pas trop compliqués. Donnez à ce essayer:

String plain = htmlText.replaceAll("<br>","\\n").replaceAll("<p>","\\n\\n").replaceAll("</p>",""); 
+3

Eh bien .. Il y a '
', '

', '
', etc .. etc .. – BalusC

+0

@BalusC ... oui, un dans la 'réalité' utiliserait un html Parser et ajouter le line.separators lors de l'extraction du texte à un StringBuilder;) J'ai eu le sentiment, l'OP utilisé une sorte de raccourci;) –

Questions connexes