嗨,因为它目前正在使用处理和学习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很新,所以任何事情都会有所帮助。
答案 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。
希望它可以帮到你!