Básicamente necesita reemplazar cada <br>
con \n
y cada <p>
con \n\n
. Entonces, en los puntos donde logra eliminarlos, debe insertar el \n
y el \n\n
respectivamente.
Aquí hay un ejemplo de inicio con la ayuda del analizador HTML Jsoup (el ejemplo HTML está escrito intencionalmente de esa manera, por lo que es difícil, si no casi imposible, utilizar expresiones regulares para esto).
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()
es innecesario, ya que sólo queremos una simple sustitución CharSequence por CharSequence aquí, no regexpattern por CharSequence reemplazo)
Salida:
<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 poco hacky, pero funciona.
relacionadas: [Extracción de HTML de una cadena de Java] (http://stackoverflow.com/questions/240546/removing-html-from-a-java-string) – miku