Mam za zadanie napisać program, który kopiuje plik tekstowy i wyświetla liczbę jego znaków, wyrazów, wierszy, etc.
Mam kilka konkretnych problemów:
- BFR nie czyta 2. wiersza, np. gdy mam plik:
Ala ma kota.
Kot lubi Alę.
To kot Ali.
Daje wynik:
Ala ma kota.
To kot Ali.
Liczba znaków: 23
Liczba znaków czarnych: 19
Liczba wyrazów: 6
Liczba wierszy: 2
Najdłuższy wiersz ma: 12 znaków
Podejrzewam, że to sprawka pętli do-while, ale nie mogę dojść do wniosku jak to poprawić...
2. Mam problem z tym, że pierwotnie dałem dwie tablice:
int []dlugoscwiersza = new int [10];
int [] dlugoscwyrazow = new int [100];
Wiedząc jaki stworzyłem plik. Ale przecież plik może być dłuższy... Zamiast 10 i 100 powinno tam być liczbawierszy. Ale liczbę wierszy obliczam niżej. Jak to rozwiązać?
Mój kod:
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;
public class AnalizaTekstu {
static double[][]tablica;
public static double[][] TworzTab() throws IOException {
@SuppressWarnings("resource")
Scanner odczyt = new Scanner(System.in);
System.out.println("Podaj nazwę pliku:");
String plik = odczyt.nextLine();
FileReader fr = null;
try {
fr = new FileReader(plik);
}
catch (FileNotFoundException e) {
System.out.println("Nie ma pliku");
}
BufferedReader bfr = new BufferedReader(fr);
String linia = "";
int liczbawyrazow = 0;
int liczbawierszy = 0;
int liczbaznakow = 0;
int liczbaznakowczarnych = 0;
//TODO jak pozbyć się tablicy, bo nie znam przecież długości pliku?
int []dlugoscwiersza = new int [10];
int [] dlugoscwyrazow = new int [100];
int i = 0;
do {
linia = bfr.readLine();
System.out.println(linia);
String[] wiersz = linia.split(" ");
String[] znaki = linia.split("");
//TODO nie czyta 2 wiersza
liczbawyrazow += wiersz.length;
liczbaznakow += znaki.length;
liczbawierszy ++;
dlugoscwiersza[i] = liczbaznakow;
dlugoscwyrazow[i] = liczbawyrazow;
i++;
} while (bfr.readLine() != null);
liczbaznakowczarnych += liczbaznakow - (liczbawyrazow - liczbawierszy);
System.out.println("Liczba znaków: " + liczbaznakow);
System.out.println("Liczba znaków czarnych: " + liczbaznakowczarnych);
System.out.println("Liczba wyrazów: " + liczbawyrazow);
System.out.println("Liczba wierszy: " + liczbawierszy);
int maxw = 0;
for (int j = 0; j<dlugoscwiersza.length; j++) {
maxw = dlugoscwiersza[0];
if (dlugoscwiersza[j] > maxw) maxw = dlugoscwiersza[j];
}
System.out.println("Najdłuższy wiersz ma: " + maxw + " znaków");
return tablica;
}
public static void main(String[] args) throws IOException{
TworzTab();
}
}