从段落标记中的Strong和<br>
标记中提取文本作为单独的字符串。
我试图用<br>
正则表达式拆分文本,但是文本包含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>
标记中提取文本,并将每个文本存储在数组的索引中。 最佳答案
您可以将拆分正则表达式扩展到<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]