2010年7月19日 星期一

字串比較問題

假設我們從 DOM 中取出 的 href 屬性值時,照理說會透過比較 DOM 所回傳的屬性名稱是否與 href 相等,進而取出 href 屬性值。( i 和 j 為迴圈變數)


String link;
//宣告 link
System.out.print("[Attr]: "+nodelist.item(i).getAttributes().item(j).getNodeName()+":");
//印出屬性名稱
System.out.print(nodelist.item(i).getAttributes().item(j).getFirstChild().getNodeValue());
//印出屬性值
if(nodelist.item(i).getAttributes().item(j).getNodeName()=="href")
      link=nodelist.item(i).getAttributes().item(j).getFirstChild().getNodeValue();
//當屬性名稱與 href 相等時,將屬性值放進 link 內

但實際上真的有 href 屬性,也不會將屬性值放置 link 內,原因在於兩者字串是不同的物件,即便字串相同, Java 也會判定兩者不相等,必須要使用 intern() 將字串放進字串池內,方可單純對字串內容作比較,於是將上述程式碼改成:


String link;
//宣告 link

System.out.print("[Attr]: "+nodelist.item(i).getAttributes().item(j).getNodeName()+":");
//印 出屬性名稱
System.out.print(nodelist.item(i).getAttributes().item(j).getFirstChild().getNodeValue());
// 印出屬性值
if(nodelist.item(i).getAttributes().item(j).getNodeName().intern()=="href")
      link=nodelist.item(i).getAttributes().item(j).getFirstChild().getNodeValue();
// 當屬性名稱與 href 相等時,將屬性值放進 link 內

這樣遇到  href 屬性時才能將屬性值放進 link 內。

參考資料:

2 則留言:

  1. 回覆
    1. 使用equals也是ok的,畢竟字串比較有很多種解法。

      刪除