如何将文本文件中的单词添加到我创建的数组中?

时间:2018-05-03 17:47:40

标签: java arrays text-files

所以我有这个文本文件,有一堆单行单词,我想添加到我的数组。但不知何故,JUnit测试仍然失败。关于如何解决这个问题的任何想法?变量numberOfWords已经声明并赋值。

if edmg1 > fdmg1:
    print ("The drgon has dealt more damage than you!")
    complete = 0

elif fdmg1 < 5:
    print ("You didn't do enough damage to kill the drgon, but you manage to escape")
    complete = 1

else:
    print ("You killed the drgon!")
    complete = 1

return complete   

-----完整档案如下。我还将分享测试-------------

public void addWordsToArray(String fileName) {
    loadWords(fileName); 

    String[] words = new String[numberOfWords];
    for (int i = 0; i < numberOfWords; i++) {
        words[i] = iter.next(); } }

------测试是:------------

public class Words {

ArrayList<String> wordList; // All the words
Iterator<String> iter; // iterator for the wordlist
int numberOfWords; // number of words in the file

String[] words; // this array holds your words

public Words() {
    wordList = new ArrayList<>();
    // iter = wordList.iterator();
}

/**
 * This method loads the words from a given file
 * 
 * @param fileName
 *            input file name
 */
private void loadWords(String fileName) {
    wordList.clear();
    numberOfWords = 0;
    // This will reference one line at a time
    String line = null;
    int count = 0;
    try {
        // FileReader reads text files in the default encoding.
        FileReader fileReader = new FileReader(fileName);

        // Always wrap FileReader in BufferedReader.
        BufferedReader bufferedReader = new BufferedReader(fileReader);

        while ((line = bufferedReader.readLine()) != null) {
            wordList.add(line.toLowerCase());
            count++;
        }

        // Always close files.
        bufferedReader.close();
        numberOfWords = count;
        iter = wordList.iterator();
    } catch (FileNotFoundException ex) {
        System.out.println("Unable to open file '" + fileName + "'");
    } catch (IOException ex) {
        System.out.println("Error reading file '" + fileName + "'");
    }
}

public String getWord(int index) {
    if (index < 0 || index >= numberOfWords) {
        return null;
    }
    return words[index];
}

/**
 * This method adds all the words to an array called words
 * 
 * variable numberOfWords is already declared and has value and contains number
 * of words
 * 
 * @param fileName:
 *            input file name
 */
public void addWordsToArray(String fileName) {
    loadWords(fileName); // DO NOT CHANGE

    String[] words = new String[numberOfWords];
    for (int i = 0; i < numberOfWords; i++) {
        words[i] = iter.next();

        // variable numberOfWords has the number of words
    // TODO
    // String[] words has been declared. Now instantiate the array to the words
    // array size is equal to the number of words

    }
    // words = null;
    // TO DO
    /**
     * Calling iter.next() will return the next word in the file. For examples
     * String w = iter.next(); iter.next() always gives a next word
     */

    // TO DO
    // Add all word into the array words

}

/**
 * 
 * @param word:
 *            input
 * @return true if the given word exits in the words array. False otherwise
 */
public boolean contains(String word) {
    for (String wordz : wordList) {
        if (wordz.contains(word)) {
            return true;
        }
    }
    return false;
}

/**
 * 
 * @param sentence:
 *            input sentence
 * @return true if every word in the sentence exists in your words array. False
 *         otherwise.
 */
public boolean containsSentence(String sentence) {
    String[] sp = sentence.split(" ");
    for (String wordz : wordList) {
        if (wordz.equals(sp)) {
            return true;
        }
    }

    return false;
}

/**
 * reverse a sentence
 * 
 * @param sentence:
 *            input sentence
 * @return reversed sentence. For example: input: "i love you" return: "you love
 *         i" (hint: trim leading and trailing spaces")
 */
public String reverseSentence(String sentence) {
    // if(sentence == null || sentence.length()==0) {
    // return sentence;
    // }
    String[] sp = sentence.split(" ");
    StringBuilder sb = new StringBuilder();
    for (int i = sp.length - 1; i >= 0; i--) {
        sb.append(sp[i]);
        sb.append(" ");
    }
    return sb.toString().trim();

}

/**
 * 
 * @param word:
 *            input word
 * @return the number of occurrences of the word . If the word does not exist,
 *         return 0
 */
public int count(String word) {
    int count = 0;
    for (String wordz : wordList) {
        if (wordz.equalsIgnoreCase(word)) {
            count++;
            // return count++;
        }
    }

    return count;
}

/**
 * 
 * @param word1:
 *            input word
 * @param word2:
 *            input word
 * @return true if all letters from word1 exist in word2, and all letters from
 *         word2 exist in word1.
 */
public boolean anagram(String word1, String word2) {
    String sw1 = word1.replaceAll("\\s", "");

    String sw2 = word2.replaceAll("\\s", "");
    boolean check = true;
    char[] w1 = sw1.toLowerCase().toCharArray();
    char[] w2 = sw2.toLowerCase().toCharArray();
    Arrays.sort(w1);
    Arrays.sort(w2);

    if (sw1.length() != sw2.length()) {
        return false;
    } else {
        check = Arrays.equals(w1, w2);

    }
    if (check) {
        return true;
    } else

        return false;

}

/**
 * 
 * 
 * @param word:
 *            input word
 * @param fileName:
 *            input file name
 * 
 *            PRINT all words that are the anagrams to the word input within
 *            words array
 * 
 */
public void findAnagram(String word, String fileName) {
    addWordsToArray(fileName); // DO NOT CHANGE

}} 

 }

-.------

2 个答案:

答案 0 :(得分:1)

正如@ scigs的评论指出的那样,你在这里留下了很多。我将假设您只是尝试将文件中的所有单词加载到一个数组中(并且每行有一个单词)。您可以使用Scanner

执行此操作
Scanner scanner = new Scanner(new File(filename));
ArrayList<String> words = new ArrayList<>();
while (scanner.hasNextLine()) {
    words.add(scanner.nextLine().trim());
}

您还可以将Apache Commons commons-io库用于其IOUtils类。 IOUtils.readLines()方法与上面的代码块完全相同,但显然使用起来更方便/更紧凑:

List<String> words = IOUtils.readLines(new FileInputStream(filename));

答案 1 :(得分:0)

words = new String[numberOfWords];
    for (int i = 0; i < numberOfWords; i++) {
        words[i]=iter.next();

工作得很好。谢谢你们!