计算java中ArrayList中字符串的出现次数 - 处理

时间:2015-03-25 23:24:08

标签: java processing

嗨,因为它目前正在使用处理和学习java,我的代码基本上通过ArrayList工作,找到最常出现的单词并将其输出到控制台,我的代码如下:

import java.util.Arrays;

ArrayList<String> words = new ArrayList();


int[] occurrence = new int[2000];
void setup() {
size(800,480);
smooth();

String[] data = loadStrings("data/data.txt"); 
    Arrays.sort(data);

for (int i = 0; i < data.length; i ++ ) {
   words.add(data[i]); 
   words.add(data[j]);   //Put each word into the words ArrayList
   }
for(int i =0; i<data.length; i++) {
    occurrence[i] =0;
    for(int j=i+1; j<data.length; j++) {
   if(data[i].equals(data[j])) {
     occurrence[i] = occurrence[i]+1;
   }
 }
}
int max = 0;
String most_talked ="";
   for(int i =0;i<data.length;i++) {
if(occurrence[i]>max) {
  max = occurrence[i];
  most_talked = data[i];
 }
 }

println("The most talked keyword is " + most_talked + " occuring " + max + " times.");

我想知道如何改变它以添加第二个最常出现的单词,依此类推。

我已经研究过使用地图以及collection.sort,但是我不知道如何继续使用它。我对java很新,所以任何事情都会有所帮助。

2 个答案:

答案 0 :(得分:2)

似乎来自Guava图书馆的Multisets对于这项工作来说是完美的。您可以将所有已阅读的单词存储到Multiset中,当您想要出现(计数)时,您可以简单地遍历Multisets.copyHighestCountFirst(myMultiset)返回的副本:

import com.google.common.collect.*;
...

// data contains the words from the text file
Multiset<String> myMultiset = ImmutableMultiset.copyOf(data);

for (String word : Multisets.copyHighestCountFirst(myMultiset).elementSet()) {
    System.out.println(word + ": " + myMultiset.count(word));
}

应该这样做。

答案 1 :(得分:1)

我想到的第一件事就是将用过的单词保存在辅助数组中,然后对于每个被查询的单词,在此列表中找到它。

如果匹配,则增加该单词的计数器(如果有太多,你也可以添加一个int []来存储事件),然后只显示它(每个aux [index]带有Occurrence [index])。

Example: (Only a scheme)
If the list is:

Tom Tom Dog fish

Then:

Aux[0] = Tom;
Aux[1] = Dog;
Aux[3] = fish;

并且每个的出现都在“int list”中:对于Tom index = 0, dog = 1,fish = 3。

希望它可以帮到你!