Hashtable内容:前两个键是Null ....如何获取我保存的内容

时间:2015-02-13 11:06:11

标签: java hashtable

我的哈希表有问题...我有一个哈希表< String1,String2> String1 =是一个JTextfield作为我的Hashtable Key String2 =是一个JTextArea作为我的Hashtable内容 myHashtable.put(JTextfield.getText(),JTextArea.getText()); 现在我想将我的Hashtable中保存的所有内容写入文件 但我的前两个内容是" null"

for (int i = 0; i < myHashtable.size(); i++) {
            String[] key = myHashtable.keySet().toString().split(", ");
            writer.println(key[i].replace("]", "").replace("[", "") + ": "
                    + myHashtable.get(key[i]));

以下输出应如下所示:

examplekey:一些内容
examplekey2:更多内容
examplekey3:一些内容
但它看起来像:

examplekey:null
examplekey2:null
examplekey3:一些内容

我写它的原因是,我想读取这个文件,在重新启动后得到我的Hashtable内容,而.keySet函数给了我一个&#34; [&#34;和&#34;]&#34;在开始和结束这就是为什么我用&#34;&#34;替换它。

1 个答案:

答案 0 :(得分:1)

您应该通过调试器运行程序,以更好地了解它正在做什么。

我们举个例子:

Hashtable<String, String> myHashtable = new Hashtable<>();
myHashtable.put("1", "rat");
myHashtable.put("2", "cat");
myHashtable.put("3", "bat");

运行循环,第一次迭代将如下所示:

myHashtable.keySet().toString() -> "[3, 2, 1]"

String[] key = myHashtable.keySet().toString().split(", ") -> "[3", "2", "1]"

key[0] -> "[3"
key[0].replace("]", "").replace("[", "") -> "3"
myHashtable.get(key[0]) -> myHashtable.get("[3") -> null

如您所见,replace()返回一个新的字符串,替换目标。它不会修改原始字符串。因此,当您致电myHashtable.get(key[0])时,密钥为"[3",而密钥不在哈希表中,因此返回null。如果您使用示例哈希表运行代码,您将在文件中得到类似的内容:

3: null
2: cat
1: null

它适用于示例中的中间键"2",因为当您拆分字符串时,它们已经没有附加"[""]"。< / p>

现在,请注意,当您执行myHashtable.keySet().toString().split(", ")时,您已经可以访问密钥集中的元素。您不必将其转换为字符串,然后尝试从此字符串中获取密钥。所以你可以这样做:

for (String key : myHashtable.keySet()) {
    writer.println(key + ": " + myHashtable.get(key));
}

如果我们直接遍历所有条目,我们可以加快速度:

for (Map.Entry<String, String> entry : myHashtable.entrySet()) {
    writer.out.println(entry.getKey() + ": " + entry.getValue());
}