繁体   English   中英

哈希表内容:前两个键为Null ...如何获取我保存的内容

[英]Hashtable content : the first 2 Keys are Null … How to get my saved content

我的哈希表有问题...我有一个哈希表<String1,String2> String1 =是一个JTextfield作为我的哈希表键String2 =是一个JTextArea作为我的哈希表内容myHashtable.put(JTextfield.getText(),JTextArea.getText()); 现在我想将我的哈希表中所有保存的内容写到文件中,但我的前2个内容为“空”

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:空
examplekey3:一些内容

之所以这样写,是因为我想读取此文件,以在重新启动后获取我的Hashtable内容,并且.keySet函数在开始和结束时给我一个“ [”和“]”,这就是我替换该文件的原因与“”。

您应该通过调试器运行程序,以更好地了解其功能。

让我们来看一个例子:

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" ,因为在拆分字符串时,它们已经没有附加"[""]"键。

现在,请注意,当您执行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());
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM