将字典文本文件加载到Java

时间:2015-06-10 19:49:07

标签: java dictionary data-structures hashmap

我需要将信息的文本文件加载到Java中。 Text文件看起来像这样

"reproduce": {
    "VB": 7
}, 
"drill": {
    "VB": 8, 
    "NN": 16
}, 
"subgross": {
    "JJ": 2
}, 
"campsites": {
    "NNS-HL": 1, 
    "NNS": 1
}, 
"streamed": {
    "VBN": 1, 
    "VBD": 2
}

它基本上是一个包含一些标签的大量单词集合。我需要将此信息保存在某种Java数据结构中,以便程序可以搜索和检索给定单词的标记统计信息

根据我的阅读,使用一种HashMap是最好的主意吗?类似的东西:

Map<KeyType, List<ValueType>>

这是个好主意吗?我该如何从文本文件中扫描这些数据?我可能会找到一种方法将字典打印到文本文件中,这样可以更容易地扫描到Java中。

1 个答案:

答案 0 :(得分:1)

虽然您的输入看起来与JSON不完全相同,但您可以通过简单的方式对其进行预处理[1]以使其成为有效的JSON。因为JSON可能更广泛,因此比您的自定义格式更受支持。

如果您的问题是JSON反序列化,那么请查看JacksonGson,它会将您的输入字符串转换为对象。

杰克逊的简单例子:

ObjectMapper mapper = new ObjectMapper(); // can reuse, share globally
Map<String,Object> data = mapper.readValue(new File("file.json"), Map.class);
// process data further here ...

Jackson和Gson都有很多选择,可以通过各种方式处理复杂的输入,例如:他们可以对地图进行序列化和反序列化,自定义对象可以处理多态(将不同输入映射到不同类的对象)等等。

根据您的问题中的输入,您可以简单地添加和附加一个大括号,并且您将拥有有效的JSON:

{
  "reproduce": {
    "VB": 7
  },
  "drill": {
    "VB": 8,
    "NN": 16
  },
  "subgross": {
    "JJ": 2
  },
  "campsites": {
    "NNS-HL": 1,
    "NNS": 1
  },
  "streamed": {
    "VBN": 1,
    "VBD": 2
  }
}