преобразуйте повреждения и концы абзаца в новую строку в Java

В основном у меня есть фрагмент HTML с
и

внутри. Я смог удалить все HTML-тэги, но выполнение так оставляет текст в неверном формате.

Я хочу что-то как nl2br() в PHP кроме реверса ввод и вывод и также принимает во внимание

теги. существует ли библиотека для него в Java?

5
задан BalusC 28 June 2010 в 12:24
поделиться

3 ответа

Вам необходимо заменить каждый
на \ n и каждый

на \ п \ п . Итак, в тех точках, где вам удастся их удалить, вам нужно вставить \ n и \ n \ n соответственно.

Вот начальный пример с помощью парсера HTML Jsoup (пример HTML специально написан таким образом, поэтому использовать регулярное выражение для этого сложно, если не почти невозможно).

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>");
}

(примечание: replaceAll () не требуется, так как здесь нам нужна простая замена charsequence-by-charsequence, а не замена regexpattern-by-charsequence)

Вывод:

<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

Немного хакерский , но это работает.

12
ответ дан 18 December 2019 в 10:42
поделиться

br2nl и p2nl не слишком сложны. Попробуйте:

String plain = htmlText.replaceAll("<br>","\\n").replaceAll("<p>","\\n\\n").replaceAll("</p>","");
3
ответ дан 18 December 2019 в 10:42
поделиться

У вас должна быть возможность использовать replaceAll. См. Пример http://www.rgagnon.com/javadetails/java-0454.html . Таких всего 2, один для р и один для бр. В примере все наоборот, но вы можете изменить его, заменив html косой чертой n

1
ответ дан 18 December 2019 в 10:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: