Fondamentalmente è necessario sostituire ogni <br>
con \n
e ogni <p>
con \n\n
. Quindi, nei punti in cui riesci a rimuoverli, devi inserire rispettivamente lo \n
e lo \n\n
.
Ecco un esempio di kickoff con l'aiuto del parser HTML Jsoup (l'esempio HTML è intenzionalmente scritto in questo modo in modo che sia difficile, se non addirittura impossibile, usare la regex per questo).
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>");
}
(nota: replaceAll()
è inutile, in quanto vogliamo solo una semplice sostituzione CharSequence-by-CharSequence qui, non regexpattern-by-CharSequence sostituzione)
uscita:
<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 po 'hacky, ma funziona.
correlati: [Rimozione HTML da una stringa Java] (http://stackoverflow.com/questions/240546/removing-html-from-a-java-string) – miku