令牌计数令牌长度

时间:2016-04-24 22:24:48

标签: java token

嘿大家我是java的新手,我正在为我的java课程介绍做奖金任务,我想知道是否有人可以帮我指导奖金问题:我只需要一个开始点!谢谢你的帮助!

这是作业的原始要求:

1)一个构造函数,它接受一个参数,一个String,用于处理输入文件的名称。 DONE 2)一个名为processFile()的函数,它不接受任何参数,并抛出IOException。此函数必须读取输入文件的内容并计算文件中每个标记(单词)的存在次数。成员变量HashMap是一个很好的类。 3)getFileName()函数,没有参数,返回包含输入文件名的String。 4)getTokenCount()函数,没有参数,返回一个int,它是输入文件中的标记(单词)的总数。 5)一个getTokenCount()函数,它接受一个String参数,并返回该标记(word)在输入文件中出现的次数。 6)一个getTokensHavingCount()函数接受一个int参数(count),并返回一个字符串的ArrayList,其中这些字符串是完全出现的标记" count"输入文件中的时间。 7)getTokensHavingLength()函数接受一个int参数(长度),并返回一个ArrayListof Strings,其中这些字符串是输入文件中具有该确切长度的标记。 8)getAverageOfCounts()函数,没有参数,返回令牌计数的平均值。

因为这是我到目前为止的代码,

import java.io.*;

public class Assignment4 {
// Your member variables go here
    private String filename;
    private int wordcount; // ?
    private Map<String, Integer> freq = new HashMap<>(); // <Key,Value>


    public Assignment4(final String fileName) {
        this.filename = fileName;
    }

    public void processFile() throws IOException {
        File file = new File(filename);
        BufferedReader reader;

        try {
            FileReader fileReader = new FileReader(file);
            reader = new BufferedReader(fileReader);
            file = null;

            String text = "";
            String line = reader.readLine();    
            while (line != null) { 
                text = text + line + " ";
                line = reader.readLine();   
            }

            StringTokenizer st = new StringTokenizer(text);
            wordcount = st.countTokens();
        }

    }

    public String getFileName() {
        return filename; 
    }

    public int getTokenCount() {
        return freq.size;  
    }

    public int getTokenCount(final String key) {
        return freq.get(key);
    }

    public ArrayList<String> getTokensHavingCount(final int count) {

        ArrayList<String> wordCount = new ArrayList<String>();

        Set<String> set = freq.keySet();
        for (String word : set) {
            int noOfTimes = freq.get(word);
            if (noOfTimes == count)
                freq.add(word);
        }
        return wordCount;
     }

     public ArrayList<String> getTokensHavingLength(final int length) {

         ArrayList<String> wordlength = new ArrayList<String>();

         Set<String> set = freq.keySet();
         for (String word : set) {
             if (word.length() == length)
                 wordlength.add(word);
         }   

         return wordlength;    
     }

     public int getCountOfTokensHavingCount(final int count) {
         return getTokensHavingCount(count).size(); 
     }

     public int getCountOfTokensHavingLength(final int length) {
         return getTokenHavingLength(count).size; 
     }

     public double getAverageOfCounts() {

         ArrayList<String> wordlength = new ArrayList<String>();
         double sum = 0.0d;
         Set<String> set = freq.keySet();
         for (String word : set) {
             sum += freq.get(word);
         } 
         return sum / (double) freq.size();
     }  
}

奖金#1:添加一个名为getCountOfTokensHavingCount()的函数,它接受一个int参数(count),并返回输入文件中出现的标记数&#34; count&#34;次。

Bonus#2:添加一个名为getCountOfTokensHavingLength()的函数,它接受一个int参数(length),并返回输入文件中出现的具有正确&#34; length&#34;的标记数。令牌中的字符。

1 个答案:

答案 0 :(得分:0)

好的,有些事情。

  • 您的函数processFile没有做它应该做的事情。您的任务是计算每个单词在文本中出现的频率。想法:逐字阅读文件(看看java.util.Scanner);如果您的HashMap中已有单词,则将该单词添加为密钥,将数字1添加为值;如果该单词已在您的HashMap中,则您将该值增加一个。
  • 为什么在file = null中设置processFile?您应该使用BufferedReader正确关闭finally。 Java实际上可以自动为您执行此操作:try(FileReader freader = new FileReader(file); BufferedReader breader = new BufferedReader(freader)) { // Your actual code }
  • 您的getTokenCount函数应该返回freq.size()(您调用函数,而不是属性!)。
  • 另外,请在if或a循环后使用始终花括号,无论您只做一件事还是代码块都很大。