2012-09-04 81 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一个去。