StringTokenizer liczenie słów w pliku.

0
public static int numberOFWords(FileReader r) throws IOException {
    BufferedReader b = new BufferedReader(r);
    String line = "";
    String page = "";
    int count= 0;
    String[] array;
    while ((line = b.readLine())!= null) 
        page += line+ " ";
    StringTokenizer st = new StringTokenizer(page);
    array = new String[st.countTokens()];
    while (st.hasMoreTokens()) {
        array[count] = st.nextToken();
        count++;
    }
    b.close();
    return count;
}

}

Ta metoda ma zliczać ilość słów w pliku, ale cały czas zwraca że słów jest 0. Gdzie popełniłam błąd?

0

Po co wrzucać słowa w tablicę, skoro potrzeba zwrócić tylko ich ilość? Tutaj przydałby się Scanner:

public static int numberOfWords(FileReader reader) {
    Scanner scanner = new Scanner(reader);
    int count = 0;
    while (scanner.hasNext()) {
        scanner.next();
        count++;
    }
    scanner.close();
    return count;
}

Twoja metoda u mnie działa, pokaż wejście, dla którego zwraca 0.

0

to jest w programie:
try {
System.out.println("Podaj ścieżkę dostępu do pliku: ");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String sciezka = br.readLine();
FileReader in = new FileReader(sciezka);
System.out.println("Liczba slów: " + numberOFWords(in));
....
coś źle?

0

I dla jakich plików zwraca 0? Testowałaś moje rozwiązanie?
Btw, jeśli dołączasz do Stringa nową linię co każdą iterację pętli, lepiej zrobić to na StringBuilderze:

String line;
StringBuilder builder = new StringBuilder();
while ((line = b.readLine()) != null) {
    builder.append(line).append(" ");
}

StringTokenizer st = new StringTokenizer(builder.toString());
0

import java.io.*;
import java.util.Scanner;

class klasak {

public static void main(String[] args) {
    try {
        System.out.println("Podaj ścieżkę dostępu do pliku: ");
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String sciezka = br.readLine();
        FileReader in = new FileReader(sciezka);
        System.out.println("Ilość linii: " + numberOfLines(in));
        System.out.println("Liczba slów: " + numberOFWords(in));
        in.close();
        br.close();

    } catch (FileNotFoundException e) {
        System.out.println("Plik nie istnieje");
        System.exit(1);
    } catch (IOException ex) {
        ex.printStackTrace();
    }
}

public static int numberOfLines(FileReader r) throws IOException {
    LineNumberReader ln = new LineNumberReader(r);
    int count = 0;
    while (ln.readLine() != null) {
        count++;
    }
    return count;
}

public static int numberOFWords(FileReader r) {
    Scanner skaner = new Scanner(r);
    int count = 0;
    while (skaner.hasNext()) {
        skaner.next();
        count++;
    }
    skaner.close();
    return count;
}

}

Dalej zwraca zero a linijki liczy normalnie.

0

A, no teraz błąd jest oczywisty. Najpierw w numberOfLines() czytasz cały plik, a potem z tego samego FileReadera chcesz przeczytać słowa.

0

Zwykły notatnik i byle jaka treść:
aaaaaaaaaa bbbbbbbbbb
cccccccccc dddddddd
eeeeeeeeee gggggggggggg
tttttttttttt hhhhhhhhhh
rrrrrrrrrrr

0

Poprawiłem poprzedni post. Najprostszym rozwiązaniem byłoby stworzenie nowego FileReadera.

0

Bardzo serdecznie dziękuję, już działa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1