我有一个严重的问题.我想从标签中提取内容,例如:
<div class="main-content">
<div class="sub-content">Sub content here</div>
Main content here </div>
Run Code Online (Sandbox Code Playgroud)
我期望的输出是:
这里的子内容
主要内容在这里
我试过使用正则表达式,但结果并不那么令人印象深刻.通过使用:
Pattern.compile("<div>(\\S+)</div>");
Run Code Online (Sandbox Code Playgroud)
会在第一个<*/div>标记之前返回所有字符串,
所以有人可以帮我吗?
我建议避免使用正则表达式来解析HTML.您可以使用Jsoup轻松完成您的要求:
public static void main(String[] args) {
String html = "<html><head/><body><div class=\"main-content\">" +
"<div class=\"sub-content\">Sub content here</div>" +
"Main content here </div></body></html>";
Document document = Jsoup.parse(html);
Elements divs = document.select("div");
for (Element div : divs) {
System.out.println(div.ownText());
}
}
Run Code Online (Sandbox Code Playgroud)
回应评论:如果你想把div元素的内容放到一个Strings 数组中,你可以简单地做:
String[] divsTexts = new String[divs.size()];
for (int i = 0; i < divs.size(); i++) {
divsTexts[i] = divs.get(i).ownText();
}
Run Code Online (Sandbox Code Playgroud)
作为对注释的回应:如果你有嵌套元素,并且你想为每个元素获得自己的文本,那么你可以使用jquery多选择器语法.这是一个例子:
public static void main(String[] args) {
String html = "<html><head/><body><div class=\"main-content\">" +
"<div class=\"sub-content\">" +
"<p>a paragraph <b>with some bold text</b></p>" +
"Sub content here</div>" +
"Main content here </div></body></html>";
Document document = Jsoup.parse(html);
Elements divs = document.select("div, p, b");
for (Element div : divs) {
System.out.println(div.ownText());
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码将解析以下HTML:
<html>
<head />
<body>
<div class="main-content">
<div class="sub-content">
<p>a paragraph <b>with some bold text</b></p>
Sub content here</div>
Main content here</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
并打印以下输出:
Main content here
Sub content here
a paragraph
with some bold text
Run Code Online (Sandbox Code Playgroud)