怎么写这个?我需要专门帮助我的nextWord方法

时间:2011-02-17 19:10:05

标签: java loops hashmap

怎么写这个?我需要专门用我的nextWord方法帮助

package code;

import java.util.HashMap;

public class WordCounter {

    /**
     * Reads a file (identified by inputFilePath), one character at a time, and tracks
     * word counts using a java.util.HashMap<String,Integer>. 
     * 
     * A word is defined as a contiguous sequence of characters that does not contain
     * word separator characters, where word separator characters are: ' ', '\t', '\n',
     * ',' and '.'
     *   
     * You may use only CharacterFromFileReader to read characters from the input file. 
     * 
     * In order to keep your code readable, break your code into several methods.  Only 
     * the wordCounts method may be public; define meaningful private helper methods that 
     * you call from the wordCounts method.
     * @returns a HashMap containing the word->count mappings
     */

    public HashMap<String,Integer> wordCounts(String inputPath) {

        return new HashMap<String, Integer>();
    }

    private String nextWord(CharacterFromFileReader iterator) {

        while(iterator.hasNext()){ 
//make loop that takes each word an saves it to a string until u hit a space break 

        String s = "";

        if(iterator.hasNext()){

    }   
        }
    return null;
    }
        } 

4 个答案:

答案 0 :(得分:0)

这个怎么样?

String words[] = str.split("[ ,\\t\\n,\\.]");

要生成str,您可以对append循环中的StringBuilder使用iterator操作。

答案 1 :(得分:0)

我会在StringBuider中使用nextWord()。然后,您可以迭代,直到到达单词分隔符或流的末尾,并返回该单词。它应该是这样的:

StringBuilder sb = new StringBuilder();
char nextChar;
while(iterator.hasNext()) {
    nextChar = iterator.next();
    switch(nextChar) {
        case ' ':
        case '\t':
        case '\n':
        case ',':
        case '.':
            return sb.toString();
    }
}

答案 2 :(得分:0)

我认为你可能正在接近以错误的方式定义nextWord的问题。看起来你已经为nextWord函数填充了一个框架而没有理解该函数应该如何完成它将要做的事情。这是倒退。请尝试以下基本步骤:

  1. 用英文写下nextWord应该做的事情。想想任何边缘情况。给一句话它应该返回什么?如果CharacterFromFileReader中没有剩下任何字符,它应该返回什么?

  2. 一旦有了这个定义,请写下(英文)逐步说明如何完成任务。例如1)获取下一个角色2)如果角色是白色空间3)等......

  3. 请尝试使用笔和纸自行遵循说明。做他们的工作?如果不编辑并重复此步骤,直到他们这样做。

  4. 现在你知道该函数应该如何工作,实现你用java代码写下的指令

答案 3 :(得分:0)

我猜测nextWord()方法的框架是由老师给出的,如果OP会提供涉及StringBuilder / StringBuffer的东西,老师可能会尖叫“我们还没有覆盖它”。此外,教师似乎对低效率的对象创造的每个角色的怪物非常满意,所以我认为OP应该只使用Strings;如:效率低下但教师允许

private String nextWord(CharacterFromFileReader iterator) {
    String toReturn = "";
    while(iterator.hasNext()){ //make loop that takes each word an saves it to a string until u hit a space break 
            String s = "";
            if(iterator.hasNext()){
                    char c = iterator.next();
                    if(c==' ') break;
                    toReturn = toReturn+c;
            }
    }
    return toReturn;
}