«1. Обзор

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

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

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

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

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

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

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. Сохранение разрывов строк, связанных с тегами \u003cbr\u003e и \u003cp\u003e

При очистке текста HTML с помощью метода Jsoup#clean удаляются разрывы строк, созданные тегами HTML, такими как \u003cbr\u003e и \u003cp\u003e .

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

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

Затем мы добавляем символ новой строки перед тегами \u003cbr\u003e и \u003cp\u003e â — еще раз, мы также отключаем настройку вывода красивого вывода:

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 с параметром Whitelist#none и отключенной настройкой вывода красивой печати:

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

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

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

Таким образом, добавляя HTML-теги \u003cbr\u003e и \u003cp\u003e с символом новой строки и отключая параметр Jsoup для вывода красивой печати, мы можем сохранить разрывы строк связанные с ними.

4. Заключение

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

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