我的文件阅读器程序,需要在列中打印,在一条长行打印?

时间:2014-12-07 00:27:02

标签: java filereader

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列中。我在使用它时遇到了一些麻烦,现在它只打印一条长线,任何人都有一些想法?

1 个答案:

答案 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;