Павел,
Я предлагаю вам прочитать эту старую ветку: Java BufferedReader обратно в начало текстового файла?.
Лично я предпочитаю ответ Джона Скита, который сводится к «Не беспокойтесь [если только вы НЕ ДОЛЖНЫ]».
Ваше здоровье. Кейт.
EDIT: Также вы должны ВСЕГДА закрывать этот входной файл, даже если вы попали в исключение. Блок 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;
}
}
И кстати, java.util.Map идеально подходит для построения таблицы частот... Параллельные массивы — это просто ТАКОЕ 90-е. Реализация карты "по умолчанию" - это класс HashMap
... По умолчанию я имею в виду использование HashMap всякий раз, когда вам нужна карта, если только у вас нет веских причин использовать что-то еще, что не будет часто. HashMap, как правило, является лучшим универсальным исполнителем.
person
corlettk
schedule
30.04.2011