2012-09-04 116 views
1

我無法搜索特定字符串xmlMatch的Hashtable。這是從一個特定的div標籤的內容派生的在Hashtable中搜索字符串 - Java

我已經包含了我用來搜索XML和定義String xmlMatch的代碼。我相信這是正確的,並已通過將其打印到屏幕上顯示出來。我知道這應該很簡單。我創建了一個快速測試Hashtable,同樣的東西在那裏工作。

我的測試代碼 - 工程

​​

按預期工作,打印以下在Eclipse控制檯

真正

DOS

我的生產代碼 - 不工作

if(startPosition >1)    
{ 
    out.println("startPosition is greater or equal to 1 "); 

    int subStringIndex = startPosition + startTag.length(); 
    subStringIndex = subStringIndex + 2; // +2 is necessary to remove "> after sliceXML    
    out.println(subStringIndex); 

    int endPosition = testContent.indexOf(endTag, subStringIndex); 
    out.println(endPosition); 

    if(endPosition >= startPosition) 
    { 

    xmlMatch = testContent.substring(subStringIndex, endPosition); 
    //out.println("This is my xmlMatch " + xmlMatch); //prints Florida 
    } 

上述print語句(啓動時)確認xmlMatch是佛羅里達

然後我實現一個簡單的哈希表

Hashtable<String, String> table = new Hashtable<String, String>(); 
    table.put("Florida","/PathToFile.txt"); 
    table.put("Telescope","/PathToFile2.txt"); 
    table.put("Galaxy","/PathToFile3.txt"); 

這是我的問題開始!

out.println(table.containsKey(xmlMatch)); 

上面打印語句打印假到屏幕上 - 我相信這等於佛羅里達州是Hashtable中它應打印作爲xmlMatch真。

String n = table.get(xmlMatch); 
out.println(n); 

而這種打印空 - 我相信這應該打印/PathToFile.txt

但是,如果我只是這樣做

out.println(xmlMatch); 

它再次打印佛羅里達屏幕

我究竟做錯了什麼?我只是想能夠搜索我的Hashtable的特定字符串。任何幫助一如既往,非常感謝。

編輯: 難道我有大寫字母的問題,也許我的xmlMatch是傳遞一個額外的空格字符?例如「佛羅里達」

EDIT 2 我的XML div標籤簡單地讀取

<sliceXML>Florida</sliceXML> 

解決SOLUTION 我在這裏加入這個,因爲它是一個解決問題的辦法,但不是這個問題我問。

Joe K的幫助下,我檢查了我的endTag,發現我無法正確編碼正斜槓。我發佈了我的工作回答here

+3

您是否檢查過:'System.out.println(「Florida」.equals(xmlMatch))'是否顯示爲真?例如可能會有一個額外的空間。 – assylias

+1

您提到內容來自div標籤。所以你可以指出out.println(xmlMatch.length())的結果。我懷疑你可能在字符串中有一些潛伏的空間。您應該嘗試使用xmlMatch.trim()來刪除字符串前後的空格。 – randominstanceOfLivingThing

+0

@ assylias我剛剛檢查過 - 它打印錯誤 - 但是當我嘗試out.println(xmlMatch);佛羅里達被打印到頁面上。正如下面的Joao Silva所建議的,我試圖修剪xmlMatch,但它仍然在屏幕上輸出null。這可能是問題的組合嗎? – Deepend

回答

0

您是否檢查過空格?只需修剪xmlMatch並重試。

2

你可能有空格在xmlMatch,使用trim()將其刪除:

String n = table.get(xmlMatch.trim()); 
out.println(n); 
+0

不幸的是,這沒有什麼區別,它是一個很好的把戲,知道未來,歡呼;) – Deepend

0

你能和 「佛羅里達」 .intern()試試嗎?

+1

這將如何幫助? hashmaps,在內部使用'equals()'方法。 –

+0

@ColinD我不得不同意你的看法。但是,一些JDK的子minmin版本存在字符串池泄漏(我曾經遇到過它,並花了很多時間來弄清楚)。我想在查看代碼 – Chris

+0

之前查看它是否是JDK版本的問題我剛試過out.println(「florida.intern()」);它在屏幕上打印佛羅里達,注意它用f打印佛羅里達,我相信它應該如此嗎? – Deepend

0

Java字符串以索引0開始,就像C數組一樣。而且,一些XML串行器/反串行器往往會縮小標籤的大小。所以,一個XML文件,如:

<Firefox>xxxx</Firefox> 

會奇蹟般地變成了:

<firefox>xxxxx</firefox> 

據我所知,在一個XML文件標籤是區分大小寫的。無論如何,如果可能的話,檢查下限和上限。

哦,是的:標籤中的額外空間可能是一種負擔。小心一切。

我最後的建議:既然你使用Java,你可以給SAX一個去。