1

我在为特定字符串 xmlMatch 搜索哈希表时遇到问题。这是从特定 div 标签的内容派生的

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

我的测试代码 - 作品

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

上面的打印语句在屏幕上打印 false - 我相信它应该打印 true,因为 xmlMatch 等于 Florida 在 Hashtable 中。

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

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

但是,如果我只是这样做

out.println(xmlMatch);

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

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

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

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

<sliceXML>Florida</sliceXML>

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

在Joe K的帮助下,我检查了我的 endTag,发现我无法正确编码正斜杠。我在这里发布了围绕答案的工作

4

4 回答 4

2

您的 , 中可能有空格xmlMatchtrim()用于删除它们:

String n = table.get(xmlMatch.trim());
out.println(n); 
于 2012-09-04T16:58:51.807 回答
0

你可以用 "Florida".intern() 试试吗?

于 2012-09-04T16:59:19.343 回答
0

Java 字符串从索引 0 开始,就像 C 数组一样。此外,一些 XML 序列化器/反序列化器倾向于小写标签。因此,一个 XML 文件,例如:

 <Firefox>xxxx</Firefox>

会神奇地变成:

 <firefox>xxxxx</firefox>

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

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

我的最后一条建议:既然您使用的是 Java,那么您可以尝试一下 SAX。

于 2012-09-04T17:01:14.827 回答
0

你检查过空格吗???只需修剪 xmlMatch 并重试。

于 2012-09-04T16:57:02.863 回答