我在String变量中有一个Big html,我想得到一个div的内容。我不能依赖正则表达式,因为它可以有嵌套的div。所以,我们假设我有以下字符串 -
String test = "<div><div id=\"mainContent\">foo bar<div>good best better</div> <div>test test</div></div><div>foo bar</div></div>";
那我怎么能用一个简单的java程序来实现呢 -
<div id="mainContent">foo bar<div>good best better</div> <div>test test</div></div>
我的approch是这样的(可能是可怕的,仍在努力纠正) -
public static void main(String[] args) {
int count = 1;
int fl = 0;
String s = "<div><div id=\"mainContent\">foo bar<div>good best better</div> <div>test test</div></div><div>foo bar</div></div>";
String tmp = s;
int len = s.length();
for (int i=0; i<len; i++){
int st = s.indexOf("div>");
if(st > -1) {
char c = s.charAt(st-1);
if(c == '/') {
count--;
} else {
count++;
}
s = s.substring(st+4);
System.out.println(s);
i = i + st;
System.out.println(c + " -- " + st + " -- " + count + " -- " + i);
if (count == 0) {
fl = i;
break;
}
}
}
System.out.println("final ind - " + fl);
s = tmp.substring(0, fl + 4);
System.out.println("final String - " + s);
}
答案 0 :(得分:2)
我建议使用JSoup来解析HTML并找到您要查找的内容。
它确实符合简单要求。你可以用几行代码做你想做的事情!
jsoup是一个用于处理真实HTML的Java库。它提供 一个非常方便的API,用于提取和操作数据,使用 最好的DOM,CSS和类似jquery的方法。
jsoup实现了WHATWG HTML5规范,并将HTML解析为 与现代浏览器相同的DOM。
从URL,文件或字符串中抓取并解析HTML
使用DOM遍历或CSS选择器查找和提取数据
jsoup旨在处理中发现的各种HTML 野生;从原始和验证到无效的标签汤; jsoup会 创造一个明智的解析树。
使用selector syntax可以非常简单地查找和提取数据。
public static void main(final String[] args)
{
final String s = "<div><div id=\"mainContent\">foo bar<div>good best better</div> <div>test test</div></div><div>foo bar</div></div>";
final Document d = Jsoup.parse(s);
final Elements e = d.select("#mainContent");
System.out.println(e.get(0));
}
输出
<div id="mainContent">
foo bar
<div>
good best better
</div>
<div>
test test
</div>
</div>
没有那么简单!
答案 1 :(得分:0)
我担心的答案是:你没有。至少没有一个“简单”的程序...
但是有希望:您可以使用HTML解析器库(如NekoHTML或HTMLParser,虽然后一个项目似乎已经死了)来解析字符串并检索您需要的部分。 / p>