2016-06-13 8 views
0
Map<String, String> hashtable = new Hashtable<>(); 
hashtable.put("eBook Cover Image", "724242"); 
hashtable.put("Cover Image", "95757"); 
hashtable.put("Image", "9242424"); 
hashtable.put("Composite", "7697979"); 
hashtable.put("Low-Res PDF (print)", "1111111111111111"); 
hashtable.put("Cover", "c11111111"); 

String s = "eBook Cover Image OR (Low-Res PDF (print) AND Composite)"; 

for (Map.Entry<String, String> m : hashtable.entrySet()) { 
    s = s.replace(m.getKey(), m.getValue()); 
} 

置き換えが正しく行われていません。文字列をマップ値に置き換える場合、キーが正確な文字列と一致する場合

eBook c11111111 9242424 OR (1111111111111111 AND pppppppppppppppp) 
+0

あなたはどんな結果を期待していますか? 'eBook c11111111 9242424 OR(1111111111111111 AND 7697979)'または '724242 OR(1111111111111111 AND 7697979)? –

+0

あなたのコードを実行したところ、 '724242 OR(1111111111111111 AND 7697979)' –

+0

724242 OR(1111111111111111 AND 7697979) – user739115

答えて

5

エントリはHashtableに設定されていない反復される順序、あなたが"eBook Cover Image"を訪れる前に、"Image"を訪問しているように見えます。

それは挿入順(デフォルト)のエントリを反復処理しますので、あなたはおそらく、(あなたはあなたの例を持っているよう)あなたが最初のマップで長いキーを入れLinkedHashMapをしたいです。

+0

挿入は、そのマップ内の任意の順序で行うことができます。 – user739115

+0

@ user739115:それは質問に入れる重要な情報でした。長さ(最長 - 最初)でキーをソートし、その順にループする必要があります。 「Hashtable」には、あなたのために魔法のようなことはありません。 –

関連する問題