Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 计算txt文件中的字数的字数计算函数_Java_Hashmap_Word Count - Fatal编程技术网

Java 计算txt文件中的字数的字数计算函数

Java 计算txt文件中的字数的字数计算函数,java,hashmap,word-count,Java,Hashmap,Word Count,我对这里的java非常陌生,所以请容忍我 我目前正在尝试创建执行以下操作的代码: 将代码添加到processFile函数中,该函数计算每个单词在文件中出现的次数 将代码添加到processFile函数中,该函数通过HashMap循环查找最频繁的单词。在循环之后,为奖金要求#1添加的变量应包含最频繁单词的值 到目前为止,我已经想到了这一点,不知道是否有人可以帮助我进一步进步 Map<String, Integer> freq = new Hashmap<Strin

我对这里的java非常陌生,所以请容忍我

我目前正在尝试创建执行以下操作的代码:

  • 将代码添加到
    processFile
    函数中,该函数计算每个单词在文件中出现的次数

  • 将代码添加到
    processFile
    函数中,该函数通过
    HashMap
    循环查找最频繁的单词。在循环之后,为奖金要求#1添加的变量应包含最频繁单词的值

  • 到目前为止,我已经想到了这一点,不知道是否有人可以帮助我进一步进步

            Map<String, Integer> freq = new Hashmap<String, Integer>();
            FileInputStream fi = new FileInputStream("readwords,txt");
            Scanner input = new Scanner(fi);
            while (input.hasNext()) {
            String word = input.next().toLowerCase();
            Integer f = freq.get(word);
                if (f == null) {
                    freq.put(word,1);
                }
                else { 
                    freq.put(word,f+1);
                }
            }
    
    Map freq=new Hashmap();
    FileInputStream fi=新的FileInputStream(“readwords,txt”);
    扫描仪输入=新扫描仪(fi);
    while(input.hasNext()){
    String word=input.next().toLowerCase();
    整数f=freq.get(字);
    如果(f==null){
    频率输出(字,1);
    }
    否则{
    频率输出(字,f+1);
    }
    }
    

    谢谢

    您的语法很接近,但是您混合了
    字符串
    声明样式,您的泛型类型缺少一个
    ,并且您的变量名不一致。我想你想要的是

    Map<String, Integer> map = new HashMap<>();
    File file = new File("readwords.txt");  
    try (Scanner input = new Scanner(file)) {
        while (input.hasNext()) {
            String word = input.next().toLowerCase();
            Integer f = map.get(word);
            if (f == null) {
                map.put(word, 1);
            } else {
                map.put(word, f + 1);
            }
        }
    } catch (FileNotFoundException fnfe) {
        fnfe.printStackTrace();
    }
    
    Map Map=newhashmap();
    File File=新文件(“readwords.txt”);
    尝试(扫描仪输入=新扫描仪(文件)){
    while(input.hasNext()){
    String word=input.next().toLowerCase();
    整数f=map.get(word);
    如果(f==null){
    地图放置(单词1);
    }否则{
    地图放置(字,f+1);
    }
    }
    }捕获(FileNotFoundException fnfe){
    fnfe.printStackTrace();
    }
    
    要计算单词数量并获取最常用的单词,您可以尝试以下方法:

       public void processFile() throws Exception {
            Map<String, Integer> freq = new HashMap<>();
            FileInputStream fi = new FileInputStream("readwords.txt");
            String mostFreqWord = null;
            Integer highestFreq = 0;
            Scanner input = new Scanner(fi);
            while (input.hasNext()) {
                String word = input.next().toLowerCase();
                Integer f = freq.get(word) == null ? 1 : freq.get(word) + 1;
    
                freq.put(word, f);
    
                if(f > highestFreq) {
                    mostFreqWord = word;  // set most frequent word
                    highestFreq = f;      // frequency of most frequent word
                }
    
            }
    
            System.out.println("Word :" + mostFreqWord
                    + " is the most frequent word with frequency:" + highestFreq);
        }
    
    然后设置单词的最新频率:
    freq.put(单词,f)


    语句
    if(f>highestFreq)
    检查最高频率是否仍然最高,如果不是,则更新
    highestFreq
    mostFreqWord
    单词。

    提问前,请确保您即将发布的
    code
    没有编译问题。谢谢!你能给我解释一下从“String mostfreqword到req.put(word,f)”的语法吗我不理解语法,我理解如何实现扫描仪来阅读文本。谢谢你的帮助!我刚刚更新了我在原始代码中修改的内容。感谢你澄清这一点,还有一个问题。整数f=freq.get(word)==null还有其他语法吗?1:freq.get(word)+1;或者这是唯一的方法?它是三元运算符,另一种方法是使用if-else语句。
    Integer f = freq.get(word) == null ? 1 : freq.get(word) + 1;