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