我创建了一个程序,该程序可以计算文本文档中不同单词的数量,然后将它们打印到控制台。我要添加到程序中的是单词应按最高频率排序。我敢肯定,这没什么大不了的,但是我不知道该怎么做。
这是代码:
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();
}
}
[首先使用地图对单词的出现进行计数。然后将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()));
}
}
}
TreeMap
根据键排序。您要做的是根据价值进行排序。您可以创建一个class
频率,其字段为String word
和int freq
。然后,您可以遍历hashmap并将这些键和值存储在此类的相应字段中。通过遍历,您可以创建一个ArrayArray of Frequency,然后使用Comparable/Comparator
可以基于'freq`进行排序。