在Hashtable中搜索字符串 - Java

时间:2012-09-04 16:51:06

标签: java

我无法在Hashtable中搜索特定的String xmlMatch。这源于特定div标签的内容

我已经包含了用于搜索XML和定义String xmlMatch的代码。我相信这是正确的,并通过将其打印到屏幕上来显示。我知道这应该很简单。我已经创建了一个快速测试Hashtable,同样的东西在那里工作。

我的测试代码 - 工作

String xmlMatch2 = "Two";
Hashtable<String, String> table2 = new Hashtable <String, String>();
table2.put("One", "Uno");
table2.put("Two", "Dos");
table2.put("Three", "Tres");

System.out.println(table2.containsKey(xmlMatch2));
String n = table2.get("Two");
System.out.println(n);

按预期工作,将以下内容打印到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
    }

上述打印声明(激活时)确认xmlMatch是佛罗里达

然后我实现了一个简单的Hashtable

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));

上面的print语句在屏幕上显示false - 我相信它应该打印为true,因为xmlMatch等于佛罗里达州的Hashtable。

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

这打印为null - 我相信这应该打印/PathToFile.txt

但是,如果我只是这样做

out.println(xmlMatch);

它再次将佛罗里达打印到屏幕上

我做错了什么?我只是希望能够在我的Hashtable中搜索特定的字符串。任何帮助都是一如既往的,非常感谢。

修改 我是否可能遇到大写字母问题,或者我的xmlMatch是否传递了额外的空格字符?例如“佛罗里达”

编辑2 我的xml div标签只是读取

<sliceXML>Florida</sliceXML>

解决方案 我在这里添加这个,因为它是问题的解决方案,但不是我问的问题。

Joe K的帮助下,我检查了我的endTag,发现我无法正确编码正斜杠。我的回答是here

4 个答案:

答案 0 :(得分:2)

您的xmlMatch可能有空格,请使用trim()将其删除:

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

答案 1 :(得分:0)

你检查过白色空间吗?只需修剪xmlMatch,然后重试。

答案 2 :(得分:0)

你可以试试“佛罗里达”.intern()?

答案 3 :(得分:0)

Java字符串以索引0开头,就像C数组一样。此外,一些XML序列化器/反序列化器倾向于小批量标记。所以,XML文件如:

 <Firefox>xxxx</Firefox>

将神奇地变为:

 <firefox>xxxxx</firefox>

AFAIK,XML文件中的标签区分大小写。无论如何,如果可能的话,检查下限和上限。

哦,是的:标签中的额外空格可能是一种负担。一切都要小心。

我的最后一条建议:既然你正在使用Java,你可以给SAX一个机会。