我正在尝试从String中删除所有HTML元素。不幸的是,我不能使用正则表达式,因为我在Blackberry平台上开发并且还不支持正则表达式。
还有其他方法可以从字符串中删除HTML吗?我在某处读过你可以使用DOM Parser,但我找不到它。
HTML文字:
<![CDATA[As a massive asteroid hurtles toward Earth, NASA head honcho Dan Truman (<a href="http://www.netflix.com/RoleDisplay/Billy_Bob_Thornton/20000303">Billy Bob Thornton</a>) hatches a plan to split the deadly rock in two before it annihilates the entire planet, calling on Harry Stamper (<a href="http://www.netflix.com/RoleDisplay/Bruce_Willis/99786">Bruce Willis</a>) -- the world's finest oil driller -- to head up the mission. With time rapidly running out, Stamper assembles a crack team and blasts off into space to attempt the treacherous task. <a href="http://www.netflix.com/RoleDisplay/Ben_Affleck/20000016">Ben Affleck</a> and <a href="http://www.netflix.com/RoleDisplay/Liv_Tyler/162745">Liv Tyler</a> co-star.]]>
没有HTML的文字:
当一颗巨大的小行星撞向地球时,美国国家航空航天局局长丹·杜鲁门(比利鲍勃桑顿)制定了一项计划,将致命的岩石分成两部分,然后摧毁整个星球,呼唤哈利·斯坦克(布鲁斯·威利斯) - 世界上的最好的石油钻井机 - 负责任务。随着时间的推移,Stamper汇集了一支精干的团队并向太空投掷,试图进行危险的任务。本阿弗莱克和丽芙泰勒共同担任此职位。
谢谢!
答案 0 :(得分:4)
在野外解析HTML时有一些很多的细微差别,其中一个更有趣的是,那里的许多页面都没有遵循任何标准。这就是说,如果你的所有HTML都像你的例子一样简单,那么这样就足够了:
char[] cs = s.toCharArray();
StringBuilder sb = new StringBuilder();
boolean tag = false;
for (int i=0; i<cs.length; i++) {
switch(cs[i]) {
case '<': if ( ! tag) { tag = true; break; }
case '>': if (tag) { tag = false; break; }
case '&': i += interpretEscape(cs, i, sb); break;
default: if ( ! tag) sb.append(cs[i]);
}
}
System.err.println(sb);
interpretEscape()
应该知道如何将>
之类的HTML转义符转换为字符对应符号,并跳过所有字符直到结束;
。
答案 1 :(得分:4)
我无法使用正则表达式 因为我正在发展 黑莓平台
您不能使用正则表达式,因为HTML是一种递归语言,而正则表达式无法处理这些。
你需要一个解析器。
答案 2 :(得分:1)
如果你可以添加外部罐子,你可以尝试使用这两个小库:
他们都允许你剥离一切。
我多次使用jericho,剥离你根据自己喜欢定义一个提取器:
class HTMLStripExtractor extends TextExtractor
{
public HTMLStripExtractor(Source src)
{
super(src)
src.setLogger(null)
}
public boolean excludeElement(StartTag startTag)
{
return startTag.getName() != HTMLElementName.A
}
}
答案 3 :(得分:1)
我试图以相反的方式解决这个问题,从HTML创建一个DOM树,然后从树中提取字符串: