哈希表内容:前 2 个键为 Null ....如何获取我保存的内容
Hashtable content : the first 2 Keys are Null .... How to get my saved content
我的哈希表有问题...我有一个哈希表< String1,String2 > String1 = 是一个 JTextfield 作为我的哈希表键
String2 = 是一个 JTextArea 作为我的 Hashtable 内容
myHashtable.put(JTextfield.getText(),JTextArea.getText());
现在我想将我所有保存的内容从我的哈希表写入一个文件
但我的前 2 个内容是 "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 : 一些内容
但它看起来像:
示例键:空
examplekey2 : null
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()
returns 一个新字符串,替换目标。它不会修改原始字符串。所以当你调用 myHashtable.get(key[0])
时,键是 "[3"
,它不在哈希表中,所以它是 returns 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());
}
我的哈希表有问题...我有一个哈希表< String1,String2 > String1 = 是一个 JTextfield 作为我的哈希表键
String2 = 是一个 JTextArea 作为我的 Hashtable 内容
myHashtable.put(JTextfield.getText(),JTextArea.getText());
现在我想将我所有保存的内容从我的哈希表写入一个文件
但我的前 2 个内容是 "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 : 一些内容
但它看起来像:
示例键:空
examplekey2 : null
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()
returns 一个新字符串,替换目标。它不会修改原始字符串。所以当你调用 myHashtable.get(key[0])
时,键是 "[3"
,它不在哈希表中,所以它是 returns 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());
}