【问题标题】:Token Count Token length令牌计数令牌长度
【发布时间】:2016-08-18 04:42:12
【问题描述】:

大家好,我是 Java 新手,我正在为我的 Java 入门课程做一个奖励作业,我想知道是否有人可以帮助指导我解决奖励问题:我只需要一个起点!谢谢你的帮助!

这是作业的原始要求:

1) 一个接受单个参数的构造函数,一个 String 表示要处理的输入文件的名称。完毕 2) 一个名为 processFile() 的函数,它不接受任何参数,并抛出一个 IOException。此函数必须读取输入文件的内容并计算每个标记(单词)在文件中存在的次数。成员变量 HashMap 是一个很好的类。 3) 一个没有参数的 getFileName() 函数返回一个包含输入文件名的字符串。 4) 无参数的 getTokenCount() 函数返回一个 int,它是输入文件中标记(单词)的总数。 5) 一个 getTokenCount() 函数,它接受一个字符串参数,并返回令牌(单词)在输入文件中出现的次数。 6) 一个 getTokensHavingCount() 函数,它接受一个 int 参数(计数),并返回一个字符串的 ArrayList,其中这些字符串是在输入文件中恰好出现“计数”次的标记。 7) 一个 getTokensHavingLength() 函数,它接受一个 int 参数(长度),并返回一个字符串数组列表,其中这些字符串是输入文件中具有该精确长度的标记。 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),并返回出现在输入文件中的标记数正好“count”次。

奖励 #2:添加一个名为 getCountOfTokensHavingLength() 的函数,该函数接受一个 int 参数(长度),并返回出现在输入文件中的标记的数量,其中标记中具有完全“长度”字符。

【问题讨论】:

  • "添加一个函数..." 我们要向什么添加一个函数?不知道这一点是不可能回答的,例如您引用了“输入文件”和“令牌”,但没有提供有关当前如何获取它们的任何详细信息。
  • 请给我们您已有的完整代码。您似乎正在处理文件。如果没有您使用的所有类的完整代码,没有人可以帮助您。
  • #1 提示:Map&lt;Token, Integer&gt;.
  • 对原始代码进行编辑并将上传谢谢大家!
  • @AndyTurner 用完整代码更新问题

标签: java token


【解决方案1】:

好的,有几件事。

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

【讨论】:

  • 您的 try-with-resources 没有完全正确清理:如果在构造 BufferedReader 时抛出异常,FileReader 不会关闭。它应该在单独的初始化语句中:try (A a = new A(); B b = new B(a)) {
猜你喜欢
  • 2017-09-24
  • 2011-11-10
  • 2017-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-21
  • 1970-01-01
  • 2016-07-29
相关资源
最近更新 更多