Java 显示文本中最常用的单词

Java 显示文本中最常用的单词,java,algorithm,hashmap,bufferedreader,Java,Algorithm,Hashmap,Bufferedreader,我有一个问题,我已经面对了两天了。 给我一个文本,它跨越几行,我必须显示文本中最常用的单词,但例如常用单词在其他单词中出现的次数相同,以显示字典最小值。 这是我的代码: import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.LinkedHashMap; import java.u

我有一个问题,我已经面对了两天了。 给我一个文本,它跨越几行,我必须显示文本中最常用的单词,但例如常用单词在其他单词中出现的次数相同,以显示字典最小值。 这是我的代码:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedHashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
    Map < String, Integer > map = new LinkedHashMap < String, Integer > ();
    BufferedReader reader = null;
    try {
        reader = new BufferedReader(new InputStreamReader(System.in));
        String currentLine = reader.readLine();
        while (currentLine != null) {
            String[] input = currentLine.replaceAll("[^a-zA-Z]", " ").toLowerCase().split(" ");
            for (int i = 0; i < input.length; i++) {
                if (map.containsKey(input[i])) {
                    int count = map.get(input[i]);
                    map.put(input[i], count + 1);

                } else {
                    map.put(input[i], 1);
                }

            }
            currentLine = reader.readLine();
        }

        String mostRepeatedWord = null;
        int count = 0;
        for (Map.Entry < String, Integer > m: map.entrySet()) {
            if (m.getValue() > count) {
                mostRepeatedWord = m.getKey();
                count = m.getValue();
            }
        }
        System.out.println(mostRepeatedWord);

    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
导入java.io.BufferedReader;
导入java.io.FileReader;
导入java.io.IOException;
导入java.io.InputStreamReader;
导入java.util.LinkedHashMap;
导入java.util.Map;
公共班机{
公共静态void main(字符串[]args){
MapMap=newlinkedhashmap();
BufferedReader reader=null;
试一试{
reader=新的BufferedReader(新的InputStreamReader(System.in));
字符串currentLine=reader.readLine();
while(currentLine!=null){
String[]input=currentLine.replaceAll(“[^a-zA-Z]”),toLowerCase().split(“”);
for(int i=0;im:Map.entrySet()){
if(m.getValue()>计数){
mostrepectedword=m.getKey();
count=m.getValue();
}
}
System.out.println(大多数重复字);
}捕获(IOE异常){
e、 printStackTrace();
}最后{
试一试{
reader.close();
}捕获(IOE异常){
e、 printStackTrace();
}
}
}

我的问题是,如何找到字典最小值?

Java中的比较遵循一个起初有点棘手的标准-字典比较也不例外,但一旦您了解了它是如何进行的,就有了对它的支持,这使得比较容易

我建议在最后的for循环中,如果计数相等,则将当前单词与
mostRepeatedWord
进行比较,如果较小(位于前面),则将其存储到
mostRepeatedWord
中。对于词典比较,请使用
m.getKey().compareTo(mostRepeatedWord)
(或
m.getKey().comparetogignorecase>)(mostRepeatedWord)
如果您想在比较中忽略大小写之间的差异。如果
m.getKey()
按字典顺序排在
mostRepeatedWord
之前(小于它),则该方法将返回一个负数(任何严格小于0的数字,不指定哪个为负数)

这样,在循环
mostrepectedword
之后,保存出现频率最高(在地图中具有最高计数)的词汇表中最小的单词

如果你想知道我是否会为你写代码,不,你会通过自己写代码学到更多。如果你遇到麻烦,一定要在评论中跟进,不过,我会回答

compareTo
方法的文档说明:

返回:

如果参数字符串等于此字符串,则值为0;值 如果此字符串在词典编纂上小于字符串,则小于0 参数;如果此字符串为 按字典顺序大于字符串参数

链接
  • 当此对象小于、等于或大于指定对象时,指定
    compareTo()
    返回负整数、零或正整数的约定

是的,我知道如何按字典顺序进行比较,但我只在c++中,在java中使用hashmap和该语言中的所有函数进行了比较,我才刚刚开始,在我的案例中,我没有明确的比较方向。