«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.