Пол,
Я предлагаю вам прочитать эту старую ветку: Java BufferedReader вернуться к началу текстового файла? .
Лично я предпочитаю ответ Джона Скита, который сводится к «Не беспокойтесь [если вы НЕ ДОЛЖНЫ].»
Приветствия.Кит.
РЕДАКТИРОВАТЬ: Также вы должны ВСЕГДА закрыть этот входной файл, даже если вы нажали исключение.Блок finally
идеально подходит для этого.
EDIT2:
Надеюсь, что вы все еще с нами.
Вот моя попыткаи, FWIW, вам не нужно сбрасывать входной файл, вам просто нужно транспонировать петли while
и for
.
package forums;
import java.util.Scanner;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class WordOccurrenceCount
{
public static void main(String[] args) {
try {
String[] words = { "and", "is", "a", "the", "of", "as" };
int[] occurrences = readOccurrences("C:/tmp/prose.txt", words);
for ( int i=0; i<words.length; i++ ) {
System.out.println(words[i] + " " + occurrences[i]);
}
} catch (Exception e) {
e.printStackTrace();
}
}
private static final int[] readOccurrences(String filename, String... words)
throws IOException
{
int[] occurrences = new int[words.length];
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(filename));
Scanner scanner = new Scanner(reader);
while ( scanner.hasNext() ) {
String word = scanner.next();
for ( int i=0; i<words.length; i++ ) {
if ( words[i].equals(word) ) {
occurrences[i]++;
}
}
}
} finally {
if(reader!=null) reader.close();
}
return occurrences;
}
}
и BTW , java.util.Map идеально подходит для построения таблицы частот ... Параллельные массивы - это всего лишь SOOOOO 90-х годов.Реализация Map по умолчанию - это класс HashMap
... По умолчанию я имею в виду использовать HashMap всякий раз, когда вам нужна карта, если только у вас нет веской причины использовать что-то еще, что будет не часто.HashMap - лучший универсальный исполнитель.