Вы можете расширить свое разделенное регулярное выражение до <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 xyz</p>
<p>hi <strong>this is<br>a<br>test</strong></p>
Результат будет:
[foo bar, test, abc xyz, hi, this is, a, test]