2010-03-21 56 views
4

我試圖從字符串中刪除所有HTML元素。不幸的是,我不能使用正則表達式,因爲我正在黑莓平臺上開發,而正則表達式還不被支持。Java從字符串中刪除HTML而沒有正則表達式

是否有任何其他方式可以從字符串中刪除HTML?我在某處讀到了可以使用DOM解析器的地方,但我無法找到它。

文字與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:

作爲一個巨大的小行星對地球的突飛猛進,NASA頭町丹·杜魯門(比利·鮑伯·鬆頓)擬訂計劃拆分致命的岩石在它殲滅整個星球之前,要求全球最好的石油鑽機Harry Stamper(布魯斯威利斯)負責執行任務。隨着時間的推移,斯坦普組裝了一支精銳的隊伍,並向太空中發起衝擊,嘗試着詭異的任務。本·阿弗萊克和莉芙泰勒共同主演。

謝謝!

+0

Blackberry API中有'Swing'嗎?有關更多提示,請查看此問題的接受答案:http://stackoverflow.com/questions/240546/removing-html-from-a-java-string – BalusC 2010-03-21 22:32:00

+0

不幸的是,Swing在BlackBerry API中不可用... – littleK 2010-03-21 22:42:52

回答

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轉義如&gt;到他們的性格同行,並跳過所有字符直到結尾;

+0

The HTML應該非常簡單,如我的示例所示。這對我有用。非常感謝! – littleK 2010-03-21 23:40:29

+1

看起來不錯。不過,您可能需要對稍作修改:目前的將跳過整個內容。 – Daniel 2010-03-21 23:45:33

1

如果你可以添加外部JAR,你可以與這兩個小庫嘗試:

它們都允許你剝去一切。

我用傑里科很多次,脫光,只要你喜歡它,你定義一個提取:

class HTMLStripExtractor extends TextExtractor 
{ 
    public HTMLStripExtractor(Source src) 
    {  
     super(src) 
     src.setLogger(null) 
    } 

    public boolean excludeElement(StartTag startTag) 
    { 
     return startTag.getName() != HTMLElementName.A 
    } 
} 
1

我會嘗試圍繞解決這個其他方式,從HTML創建一個DOM樹,然後解壓來自樹的字符串:

  • 使用像TagSoup這樣的庫來解析HTML,同時清理它以接近XHTML。
  • 當您將清理好的XHTML進行流式處理時,請提取所需的文本。
4

我不能使用正則表達式 因爲我的 黑莓平臺

發展不能使用正則表達式,因爲HTML是一種遞歸語言和正則表達式不能處理這些。

你需要一個解析器。

相關問題