Как можно написать это?Мне нужна помощь конкретно с моим методом nextWord - PullRequest
1 голос
/ 17 февраля 2011

Как можно написать это?Мне нужна помощь конкретно с моим методом 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 голосов
/ 26 февраля 2011

Я предполагаю, что кадр для метода 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;
}
0 голосов
/ 17 февраля 2011

Я бы использовал 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();
    }
}
0 голосов
/ 17 февраля 2011

Я думаю, что вы, возможно, подходите к проблеме определения следующего слова неправильным путем.Похоже, что вы заполнили рамку для функции nextWord, не понимая, КАК эта функция должна выполнить то, что собирается делать.Это задом наперед.Попробуйте выполнить следующие основные шаги:

  1. Запишите на английском языке именно то, что должен делать nextWord.Подумайте о любых крайних случаях.Что он должен вернуть с учетом предложения?Что должно возвращаться, если в CharacterFromFileReader не осталось символов?

  2. Как только вы получите это определение, запишите (на английском языке) пошаговые инструкции для выполнения задачи.например, 1) Получить следующий символ 2) Если символ является пробелом 3) и т. д ...

  3. Попробуйте самостоятельно выполнить инструкции, используя ручку и бумагу.Они работают?Если не редактировать и повторять этот шаг, пока они не сделают.

  4. Теперь, когда вы знаете, КАК должна работать функция, реализуйте инструкции, которые вы записали, используя код Java

0 голосов
/ 17 февраля 2011

Как насчет этого?

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

Для генерации str вы можете использовать операцию append для StringBuilder в цикле iterator.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...