2010-06-28 12 views
5

Fondamentalmente ho un frammento HTML con <br> e <p></p> all'interno. Sono stato in grado di rimuovere tutti i tag HTML, ma facendo così lascia il testo in un cattivo formato.convertire le interruzioni e le interruzioni di paragrafo in una nuova riga in java

Desidero qualcosa come nl2br() in PHP tranne invertire l'input e l'output e tiene anche conto dei tag <p>. c'è una libreria per questo in Java?

+0

correlati: [Rimozione HTML da una stringa Java] (http://stackoverflow.com/questions/240546/removing-html-from-a-java-string) – miku

risposta

12

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.

+0

grazie. questo funziona per me: D – user91954

+0

Prego. – BalusC

3

br2nl e p2nl non sono troppo complicati. Dare una prova:

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

Beh, ci sono '
', '

', '
', ecc. Ecc. – BalusC

+0

@BalusC ... sì, nella 'realtà' si usa un html parser e aggiungi i line.separators mentre estrai il testo in uno StringBuilder;) Ho avuto la sensazione, l'OP usava una sorta di scorciatoia;) –

Problemi correlati