import java.util.TreeMap;
import java.io.*;
public class ReadFile
{
public static TreeMap<String, Integer> generateFrequencyList()
throws IOException {
TreeMap<String, Integer> wordsFrequencyMap = new TreeMap<String, Integer>();
String file = "file1.txt";
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
while( (line = br.readLine()) != null){
String [] tokens = line.split("\\s+");
for (String token : tokens) {
token = removePunctuation(token);
if (!wordsFrequencyMap.containsKey(token.toLowerCase())) {
wordsFrequencyMap.put(token.toLowerCase(), 1);
} else {
int count = wordsFrequencyMap.get(token.toLowerCase());
wordsFrequencyMap.put(token.toLowerCase(), count + 1);
}
}
}
return wordsFrequencyMap;
}
private static String removePunctuation(String token) {
token = token.replaceAll(",","").replaceAll("\\.","").replaceAll(";","").replaceAll("!","");
return token;
}
public static void main(String[] args){
try{
TreeMap<String, Integer> freqMap = generateFrequencyList();
System.out.println(freqMap);
} catch (Exception e) {
e.printStackTrace();
}
}
}
此代码读取.txt文件并返回文件中的每个单词及其频率,我需要它给我百分比并将其全部打印在3列中。我在使用它时遇到了一些麻烦,现在它只打印一条长线,任何人都有一些想法?
答案 0 :(得分:1)
您只是按原样打印频率图,而是必须遍历地图并构建这三列,您必须将System.out.println(freqMap);
替换为例如:
for(final Map.Entry<String,Integer> entry : freqMap.entrySet()) {
final String key = entry.getKey();
final Integer value = entry.getValue();
final float percentage = /* calculate percentage here */ ;
System.out.println(key + " = " + value + " => " + percentage);
}
当然,您必须自己计算百分比,因为TreeMap
仅包含绝对频率,例如
float total = 0;
for (final Integer wordCount : freqMap.values()) {
total += wordCount;
}
// ...
final float percentage = (value / total) * 100;