【问题标题】:Java, Hashmap,Data Type ConversionJava、Hashmap、数据类型转换
【发布时间】:2014-09-25 17:00:02
【问题描述】:

我将读取一个包含文本文件(总共 7GB)的文件夹 (wiki-pmi),并将它们放入哈希图中。文本文件的每一行都像:地球物理毕业0.1321

我写了以下代码:

HashMap<String,Double> pmi = new HashMap<String,Double>();
File folder = new File("wiki-pmi");
String line;
File[] listofFiles = folder.listFiles();
for(File file: listofFiles)
{
if(file.isFile())
{
BufferedReader br1  = new BufferedReader(new FileReader(file));

while((line=br1.readLine())!=null)
{
String[] split=line.split(" ");
pmi.put(split[0]+ ","+ split[1], Double.parseDouble(split[2]));
}
}
}

但是,在 Eclipse 上运行后出现以下错误:

 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
 at NLP.main(NLP.java:30)

指向 (java:30) 到

pmi.put(split[0]+ ","+ split[1], Double.parseDouble(split[3]));

我猜是我从String类型转换为Double类型失败吧?

【问题讨论】:

  • 不应该是 pmi.put(split[0]+ ","+ split[1], Double.parseDouble(split[2])); ?您正在尝试使用长度为 3 的数组的 forutrh emelent(它以 0 开头)
  • 谢谢,还有其他方法可以将带有“地球物理毕业 0.1321”的文本文件放入哈希图中吗?
  • 我认为你这样做的方式是正确的。您可以使用正则表达式,但在这种情况下,它会比简单的 split() 更复杂
  • @Barteks2x 根据异常它指向索引 1。
  • 使用前检查 split[] 的大小。如果不是你期望的大小,打印出来并停下来看看是否有坏数据。

标签: java file-io hashmap type-conversion


【解决方案1】:

Split[3] 越界.. 由于您的字符串拆分函数将返回一个大小为 3 且 startIndex = 0

的数组

【讨论】:

  • 谢谢,但是写错了。我已经将其更改为 2,但问题仍然存在。
【解决方案2】:

首先,为您的地图添加容量:

HashMap<String,Double> pmi = new HashMap<String,Double>(2000);

默认容量为 16,每次需要增加时都会翻倍(16..32..64..128..256....)。

将所有内容加载到地图中是个坏主意,您应该使用临时数据库。

关于你的转化和优化,你能给出示例行吗?

【讨论】:

  • 感谢您的评论...我将其更改为 2000 但尚未工作。我不明白你所说的样本是什么意思。但是文本文件中的每一行如下:batch batched 0.3992 batch batches 0.5732 batch batching 0.4788 batch baths 0.1132 batch baths 0.1406 batch battalion 0.1406 每行有三个标记
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-17
  • 1970-01-01
  • 2018-04-08
  • 1970-01-01
  • 1970-01-01
  • 2020-10-17
  • 1970-01-01
相关资源
最近更新 更多