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

问题描述 投票:0回答:2

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

这是代码:

public static void main(String [] 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();
    }
}
java eclipse sorting bufferedreader filereader
2个回答
1
投票

[首先使用地图对单词的出现进行计数。然后将Map的条目放入列表中,并使用Collections.sort()和比较器对其进行排序。比您仅可以打印排序后的列表:

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: " + fileReaderMap.get(entry.getValue()));
    }
    }
}

0
投票

TreeMap根据键排序。您要做的是根据价值进行排序。您可以创建一个class频率,其字段为String wordint freq。然后,您可以遍历hashmap并将这些键和值存储在此类的相应字段中。通过遍历,您可以创建一个ArrayArray of Frequency,然后使用Comparable/Comparator可以基于'freq`进行排序。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.