Как извлечь и сохранить в строковом массиве текст между <strong>и <br>, который находится внутри тега <p>без html-кода (т.е. и т. Д.) В нем - PullRequest
1 голос
/ 29 апреля 2019

Извлечение текста из сильных и <br> тегов в теге параграфа в виде отдельной строки. Я попытался разделить текст с помощью <br> regex, но текст содержит HTML-код, такой как p, strong и nbsp.

Пример кода:

Document doc = Jsoup.parse(HTML);
Elements Paragraphs = doc.getElementsByTag("p");
String options = Paragraphs.first().html();
String[] singleOption = options.split("<br>");

Я хочу извлечь текст из тегов strong и <br> и сохранить каждый из них в индексе массива.

1 Ответ

0 голосов
/ 10 мая 2019

Вы можете расширить свое разделенное регулярное выражение до <br>|</?strong>, это разделит строку на теги <br> и <strong>.Для удаления других тегов вы можете использовать Jsoup.clean(string, Whitelist.none()).Для удаления символов Unicode используйте Parser.unescapeEntities(string, false).

Сочетая все это с использованием Java Streams, решение выглядело бы так:

Document doc = Jsoup.parse(html);
String[] parts = doc.select("p").stream()
        .flatMap(e -> Stream.of(e.html().split("<br>|</?strong>")))
        .map(s -> Jsoup.clean(s, Whitelist.none()))
        .map(s -> Parser.unescapeEntities(s, false))
        .map(String::trim)
        .filter(s -> !s.isEmpty())
        .toArray(String[]::new);

При этом поиск по всем абзацам анализирует их.

Для примера ввода:

<p>foo b<i>a</i>r <strong>test</strong><br>abc&nbsp;xyz</p>
<p>hi <strong>this&nbsp;is<br>a<br>test</strong></p>

Результат будет:

[foo bar, test, abc xyz, hi, this is, a, test]
...