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 .