1

特定の文字列xmlMatchのハッシュテーブルを検索するのに問題があります。これは、特定のdivタグの内容から派生しています

XMLを検索し、StringxmlMatchを定義するために使用するコードを含めました。私はこれが正しいと信じており、それを画面に印刷することによってそのように示しています。私はこれが単純であるべきだと知っています。クイックテストハッシュテーブルを作成しましたが、同じことがそこで機能します。

私のテストコード-動作します

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のコンソールに以下を出力します

true

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がFloridaであることを確認します

次に、単純なハッシュテーブルを実装します

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を出力します-フロリダに等しいxmlMatchがハッシュテーブルにあるのでtrueを出力するはずです。

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

そしてこれはnullを出力します-これは/PathToFile.txtを出力するはずだと思います

しかし、私がこれを単純に行うと

out.println(xmlMatch);

もう一度フロリダを画面に印刷します

私は何が間違っているのですか?ハッシュテーブルで特定の文字列を検索できるようにしたいだけです。いつものように、どんな助けでも大歓迎です。

編集: 大文字に問題がある可能性がありますか、またはxmlMatchが追加のスペース文字を渡している可能性がありますか?例:「フロリダ」

編集2 私のxmldivタグは単に読み取ります

<sliceXML>Florida</sliceXML>

回避 策の解決策これは問題の解決策ですが、私が尋ねた質問の解決策ではないため、ここに追加します。

Joe Kの助けを借りて、endTagを確認したところ、スラッシュを正しくエンコードできなかったことがわかりました。回答を回避するための作業をここに投稿しました

4

4 に答える 4

2

に空白が含まれている可能性がありますxmlMatch。使用trim()してそれらを削除します。

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

空白をチェックしましたか?xmlMatchをトリミングして、再試行してください。

于 2012-09-04T16:57:02.863 に答える
0

Java 文字列は、C 配列と同様にインデックス 0 から始まります。また、一部の XML シリアライザー/デシリアライザーは、タグを小文字にする傾向があります。つまり、次のような XML ファイルです。

 <Firefox>xxxx</Firefox>

魔法のようになります:

 <firefox>xxxxx</firefox>

私の知る限り、XML ファイルのタグは大文字と小文字が区別されます。とにかく、可能であれば、上下のキャップを確認してください。

ああ、そうです。タグ内の余分なスペースは負担になる可能性があります。すべてに注意してください。

最後のアドバイス: Java を使用しているので、SAX を試すことができます。

于 2012-09-04T17:01:14.827 に答える
0

"Florida".intern() で試すことができますか?

于 2012-09-04T16:59:19.343 に答える