Перейти к основному содержимому

Сохранение разрывов строк при использовании Jsoup

· 3 мин. чтения

1. Обзор

В этом руководстве мы кратко рассмотрим различные способы сохранения разрывов строк при использовании Jsoup для преобразования HTML в обычный текст . Мы расскажем, как сохранить разрывы строк, связанные с символами новой строки ( \n ), а также те, которые связаны с тегами <br> и <p> .

2. Сохранение \n при разборе HTML-текста

Jsoup удаляет символ новой строки ( \n ) по умолчанию из текста HTML и заменяет каждую новую строку символом пробела.

Однако, чтобы Jsoup не удалял символы новой строки, мы можем изменить OutputSetting Jsoup и отключить красивую печать. Если красивая печать отключена, методы вывода HTML не будут переформатировать вывод, и вывод будет выглядеть как ввод:

Document.OutputSettings outputSettings = new Document.OutputSettings();
outputSettings.prettyPrint(false);

Кроме того, мы можем использовать Jsoup # clean для удаления всех тегов HTML из строки:

String strHTML = "<html><body>Hello\nworld</body></html>";
String strWithNewLines = Jsoup.clean(strHTML, "", Whitelist.none(), outputSettings);

Давайте посмотрим, как выглядит наша выходная строка strWithNewLines :

assertEquals("Hello\nworld", strWithNewLines);

Таким образом, мы можем видеть, что, вызывая Jsoup # clean с Whitelist # none и отключая параметр вывода Jsoup для красивой печати, мы можем сохранить разрывы строк, связанные с символом новой строки.

Посмотрим, что еще мы можем сделать!

3. Сохранение разрывов строк, связанных с тегами <br> и <p>

При очистке текста HTML с помощью метода Jsoup # clean удаляются разрывы строк, созданные тегами HTML, такими как <br> и <p> .

Чтобы сохранить разрывы строк, связанные с этими тегами, нам сначала нужно создать документ Jsoup `` из нашей строки HTML:

String strHTML = "<html><body>Hello<br>World<p>Paragraph</p></body></html>";
Document jsoupDoc = Jsoup.parse(strHTML);

Затем мы добавляем символ новой строки перед тегами <br> и <p> — еще раз, мы также отключаем настройку вывода красивого вывода:

Document.OutputSettings outputSettings = new Document.OutputSettings();
outputSettings.prettyPrint(false);
jsoupDoc.outputSettings(outputSettings);
jsoupDoc.select("br").before("\\n");
jsoupDoc.select("p").before("\\n");

Здесь мы использовали метод select Jsoup Document вместе с методом before для добавления символа новой строки.

После этого мы получаем строку HTML из jsoupDoc, сохраняя исходные новые строки:

String str = jsoupDoc.html().replaceAll("\\\\n", "\n");

Наконец, мы вызываем Jsoup # clean с белым списком # none и отключенной настройкой вывода красивого вывода:

String strWithNewLines = Jsoup.clean(str, "", Whitelist.none(), outputSettings);

И наша выходная строка strWithNewLines выглядит так:

assertEquals("Hello\nWorld\nParagraph", strWithNewLines);

Таким образом, добавляя HTML-теги <br> и <p> с символом новой строки и отключая параметр Jsoup для вывода красивой печати, мы можем сохранить связанные с ними разрывы строк.

4. Вывод

В этой короткой статье мы узнали, как сохранить разрывы строк, связанные с символами новой строки ( \n ) и тегами <br> и <p> при синтаксическом анализе HTML в обычный текст с помощью Jsoup.

Как всегда, все эти примеры кода доступны на GitHub .