我有一个问题,我不知道确切从哪里开始。给我多行文字,我必须找到最常用的单词,如果出现的单词与我要找的单词一样多,那么我必须显示最小的词典。我知道我应该使用“哈希图”,但是我不知道该如何开始。我试图写这个...
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Main{
public static void main(String[] args) throws Exception {
String line, word = "";
int count = 0, maxCount = 0;
ArrayList<String> words = new ArrayList<String>();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while((line = br.readLine()) != null) {
String string[] = line.toLowerCase().split("([,.\\s]+) ");
for(String s : string){
words.add(s);
}
}
for(int i = 0; i < words.size(); i++){
count = 1;
for(int j = i+1; j < words.size(); j++){
if(words.get(i).equals(words.get(j))){
count++;
}
}
if(count > maxCount){
maxCount = count;
word = words.get(i);
}
}
System.out.println(word);
}
}
遍历所有单词
HashMap<String, Integer>
。字符串是关键,这将是您存储单词的地方。整数是值,它将存储单词的出现频率。Map<String, Integer> wordCounts = new HashMap<>();
您也不需要使用列表来包含您的单词。将它们直接放在地图上。
这里是一个例子:
String[] words = line.toLowerCase().split("([,.\\s]+) "); for(String s: words){ //get a current frequency or set to be 0 if it doesn't exist. Integer freq = wordCounts.getOrDefault(s, 0); wordCounts.put(s, freq+1); }