Java 查找文本中最常用的单词
有人给了我几行文字。我必须找到最常见的单词,如果更多的单词出现的次数与我正在寻找的单词一样多,我必须显示最小的词典 我想我应该使用HashMap,但是我不知道从哪里开始 我试过这个:Java 查找文本中最常用的单词,java,algorithm,hashmap,bufferedreader,Java,Algorithm,Hashmap,Bufferedreader,有人给了我几行文字。我必须找到最常见的单词,如果更多的单词出现的次数与我正在寻找的单词一样多,我必须显示最小的词典 我想我应该使用HashMap,但是我不知道从哪里开始 我试过这个: import java.io.BufferedReader; import java.io.FileReader; import java.io.InputStreamReader; import java.util.ArrayList; public class Main{ public static v
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);
}
}
导入java.io.BufferedReader;
导入java.io.FileReader;
导入java.io.InputStreamReader;
导入java.util.ArrayList;
公共班机{
公共静态void main(字符串[]args)引发异常{
字符串行,word=“”;
int count=0,maxCount=0;
ArrayList words=新的ArrayList();
BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in));
而((line=br.readLine())!=null){
字符串[]=line.toLowerCase().split(([,.\\s]+))”;
for(字符串s:String){
字。加上(s);
}
}
for(int i=0;i最大计数){
最大计数=计数;
单词=单词。获取(i);
}
}
System.out.println(word);
}
}
以下是我将遵循的流程
HashMap
。字符串是键,这将是存储单词的地方。整数是值,这将存储单词的频率在考虑解决此问题的
HashMap
方法时,您是正确的
HashMap可以包含一个唯一的单词,它是一个键,它的频率是一个值
Map<String, Integer> wordCounts = new HashMap<>();
它还没有完成。循环搜索字数
的条目以查找最常用的单词
int max = 0;
String word = null;
for(Map.Entry<String, Integer> entry: wordCounts.entrySet()) {
if(entry.getValue() > max) {
max = entry.getValue();
word = entry.getKey();
}
}
int max=0;
字符串字=null;
for(Map.Entry:wordCounts.entrySet()){
if(entry.getValue()>max){
max=entry.getValue();
word=entry.getKey();
}
}
您不必使用HashMap。ArrayList也可以。我认为你已经找到了解决这个问题的好方法。我建议将问题分解成更小的部分和案例,然后再继续。例如,从读取示例文件中的单词开始。它有用吗?它的字数和预期的一样多吗?然后进入下一阶段,找到最常用的单词。它能做到吗?你能处理多个“最常见”的情况吗。等等我强烈推荐打印每一个部分。可以考虑使用Hashmap的这个改变…取hashmap words=newhashmap(),而不是ArrayList“words”;然后检查map是否包含您的实际单词作为关键字:如果没有将其放在map中,则使用值1,否则增加值。好的答案,尽管我会使用名称wordCounts
,而不是result
,它对map的内容没有任何意义。@VGR,非常同意:-)。将对其进行更新以使其更好。@TranHo通过按字典顺序计算最大计数和最小计数来完成您的答案。@vivek_23,哈哈,差点忘了。我会更新它:D.ThanksI因为同样的想法而投票,但我的答案比你的快1秒钟D@TranHo看起来你赢了我,会投你的票吗,因为它有代码示例
int max = 0;
String word = null;
for(Map.Entry<String, Integer> entry: wordCounts.entrySet()) {
if(entry.getValue() > max) {
max = entry.getValue();
word = entry.getKey();
}
}