gpt4 book ai didi

Java TreeMap 即使键存在也返回 null

转载 作者:行者123 更新时间:2023-11-30 04:27:35 25 4
gpt4 key购买 nike

我有一个类,它使用一个外部方法扩展 TreeMap。外部方法“open”假设以以下格式“word:meaning”从给定文件中读取行并将其添加到 TreeMap - put("word", "meaning")。

因此,我使用 RandomAccessFile 读取文件并将键值放入 TreeMap 中,当我打印 TreeMap 时,我可以看到正确的键和值,例如:

{AAAA=BBBB, CAB=yahoo!}

但由于某种原因,当我 get("AAAA") 时,我得到 null。

发生这种情况的原因以及如何解决?

这是代码

public class InMemoryDictionary extends TreeMap<String, String> implements
PersistentDictionary {
private static final long serialVersionUID = 1L; // (because we're extending
// a serializable class)
private File dictFile;

public InMemoryDictionary(File dictFile) {
super();
this.dictFile = dictFile;
}

@Override
public void open() throws IOException {
clear();
RandomAccessFile file = new RandomAccessFile(dictFile, "rw");
file.seek(0);
String line;
while (null != (line = file.readLine())) {
int firstColon = line.indexOf(":");
put(line.substring(0, firstColon - 1),
line.substring(firstColon + 1, line.length() - 1));
}
file.close();
}

@Override
public void close() throws IOException {
dictFile.delete();
RandomAccessFile file = new RandomAccessFile(dictFile, "rw");
file.seek(0);
for (Map.Entry<String, String> entry : entrySet()) {
file.writeChars(entry.getKey() + ":" + entry.getValue() + "\n");
}
file.close();
}

}

最佳答案

问题之前版本中的“问号”很重要。它们表明您认为看到的字符串实际上并不是您正在使用的字符串。 RandomAccessFile 是读取文本文件的一个糟糕选择。您可能正在读取一个文本文件,其文本编码不是单字节(也许是utf-16)?由于 RandomAccessFile 进行了“ascii”字符转换,因此生成的字符串被错误编码。这会导致您的 get() 调用失败。

首先,找出文件的字符编码,然后使用适当配置的 InputStreamReader 打开它。

其次,扩展TreeMap是一个非常糟糕的设计。此处使用聚合,而不是扩展。

关于Java TreeMap<String, String> 即使键存在也返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15484834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com