2016-01-22 21 views
0

我有一个文本文件,其中包含数千行的1个单词/字符。我创建了一个TreeMap<String, Integer> s = new TreeMap<>();,它将文本文件中的每一行存储为关键字,并且该地图的值是一个整数,用于计算文件中找到同一个单词的次数(重复项)。Java将输入文件中找到的次数写入文件的映射关键码(存储为映射的值)

我想现在将结果写入到输出文件w中,其中重复项的打印次数与它们出现的次数相同(作为映射值计算)。

截至目前,我有以下的代码写入到输出文件:

for (String value : s.keySet()) { 
    w.println(value); 
} 

但是,这仅在输出文件中写入一次,每个键。基本上就是我试图得到的是:

地图:

[(hello, 1); (apple, 3); (java, 2); (python, 1)] 

输出文件应该是:

apple 
apple 
apple 
hello 
java 
java 
python 
+2

而且......你有什么试过的?你面临的困难是什么?你似乎知道地图是如何工作的,而且你似乎知道如何循环,所以你拥有了你需要的一切。 –

+0

它写一次,因为's.keySet()'返回一组键,这意味着=>你得到的所有单词,但不是,它们出现的时间有多少。你需要做的是在第一个循环中为第二个循环(for int(int i = 0; i

+0

我尝试了一些不同的东西,主要是尝试编写一个for循环,该循环根据与该键相对应的值将键写入输出文件特定的次数。但是,由于某些原因,当我添加for循环并尝试运行该程序时,它不再写入输出文件。我试图弄清楚为什么会发生这种情况,并找出一些可以实现这一点的不同方式。 – MastRofDsastR

回答

0

您应该遍历所有的地图,不只是键的条目。该条目捕获密钥(保存要写入的单词)和值(保存要写入的次数)。请拨打电话Map.entrySet()。这在你的情况下返回一个Set<Map.Entry<String, Integer>>Map.Entry代表地图的一个条目。然后:

  • getKey()返回此条目的密钥,即要写入的单词。
  • getValue()返回这个条目的值,这是它应该被写入的次数。

示例代码:

for (Map.Entry<String, Integer> entry : s.entrySet()) { 
    for (int i = 0; i < entry.getValue(); i++) { 
     w.println(entry.getKey()); 
    } 
} 
0

您使用密钥集()方法来检索词的做法是正确的。请记住,每个键的相应值也表示每个单词重复了多少次。请确保使用每个键的值,以便可以打印每个单词/字符“值”的次数。