2010-06-28 19 views
5

Básicamente tengo un fragmento de HTML con <br> y <p></p> dentro. Pude eliminar todas las etiquetas HTML, pero al hacerlo deja el texto en mal formato.convierte saltos y saltos de párrafo en una nueva línea en java

Quiero algo como nl2br() en PHP excepto invertir la entrada y la salida y también toma en cuenta <p> etiquetas. ¿hay una biblioteca para él en Java?

+0

relacionadas: [Extracción de HTML de una cadena de Java] (http://stackoverflow.com/questions/240546/removing-html-from-a-java-string) – miku

Respuesta

12

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.

+0

gracias. esto funciona para mí: D – user91954

+0

De nada. – BalusC

3

br2nl y p2nl no son demasiado complicadas. Seguirlo:

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

Bueno .. Hay '
', '

', '
', etc. etc. – BalusC

+0

@BalusC ... sí, y en 'realidad' se usaría un html analizador y agregue line.separators mientras extrae el texto en un StringBuilder;) tuve la sensación, el OP utilizó una especie de atajo;) –

Cuestiones relacionadas