Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.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 按频率对文本文件中的单词进行排序_Java_Eclipse_Sorting_Bufferedreader_Filereader - Fatal编程技术网

Java 按频率对文本文件中的单词进行排序

Java 按频率对文本文件中的单词进行排序,java,eclipse,sorting,bufferedreader,filereader,Java,Eclipse,Sorting,Bufferedreader,Filereader,我创建了一个程序,它计算文本文档中不同单词的数量,然后将它们打印到控制台。我想添加到程序中的是,单词应该按最高频率排序。我肯定这没什么大不了的,但我不知道该怎么办 代码如下: public static void mainString[]args引发FileNotFoundException、IOException{ Map<String, Integer> fileReaderMap = new HashMap<>(); try (BufferedReader br

我创建了一个程序,它计算文本文档中不同单词的数量,然后将它们打印到控制台。我想添加到程序中的是,单词应该按最高频率排序。我肯定这没什么大不了的,但我不知道该怎么办

代码如下:

public static void mainString[]args引发FileNotFoundException、IOException{

Map<String, Integer> fileReaderMap = new HashMap<>();

try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
    StringBuilder sb = new StringBuilder();
    String line = br.readLine();

    while (line != null) {
    String[] words = line.split(" ");
    for (int i = 0; i < words.length; i++) {
        if (!fileReaderMap.containsKey(words[i])) {
        fileReaderMap.put(words[i], 1);
        } else {
        int newValue = fileReaderMap.get(words[i]) + 1;
        fileReaderMap.put(words[i], newValue);
        }
    }
    sb.append(System.lineSeparator());
    line = br.readLine();
    }
}

TreeMap根据键进行排序。你要做的是根据值进行排序。你可以创建一个类,比如说Frequency,包含字符串字和int freq等字段。然后你可以迭代hashmap并将这些键和值存储在这个类各自的字段中。通过遍历,你可以创建一个频率的ArrayList,并使用Comparitable/Comparator您可以根据“freq”进行排序。

首先使用映射计算单词的外观。然后将映射的条目放入列表中,并使用Collections.sort和Comparator对其进行排序。然后您可以只打印排序后的列表:

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

public class Snippet {

    public static void main(String[] args) throws FileNotFoundException, IOException {

    Map<String, Integer> fileReaderMap = new HashMap<>();

    try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
        StringBuilder sb = new StringBuilder();
        String line = br.readLine();

        while (line != null) {
        String[] words = line.split(" ");
        for (int i = 0; i < words.length; i++) {
            if (!fileReaderMap.containsKey(words[i])) {
            fileReaderMap.put(words[i], 1);
            } else {
            int newValue = fileReaderMap.get(words[i]) + 1;
            fileReaderMap.put(words[i], newValue);
            }
        }
        sb.append(System.lineSeparator());
        line = br.readLine();
        }
    }
    List<Entry<String, Integer>> sorted = new ArrayList<>(fileReaderMap.entrySet());
    Collections.sort(sorted, new Comparator<Entry<String, Integer>>() {
        @Override
        public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {
        int comp = Integer.compare(o1.getValue(), o2.getValue());
        if (comp != 0) {
            return comp;
        }
        return o1.getKey().compareTo(o2.getKey());
        }
    });

    for (Entry<String, Integer> entry : sorted) {
        System.out.println("Ord: " + entry.getKey() + "\t Antal Gånger: " + entry.getValue());
    }
    }
}

我从中得到的只是空值。entry.getValue返回以下错误消息:映射上getObject的参数类型不太可能为Integer。这是为什么?抱歉,System.out.println中的最后一个变量错误。我更改了它。