• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Odczyt i analiza pliku z tekstu

Cloud VPS
0 głosów
375 wizyt
pytanie zadane 3 stycznia 2019 w Java przez Tom_Ja Dyskutant (7,970 p.)

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:

  1. 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();
      }
 
}

 

1 odpowiedź

+1 głos
odpowiedź 3 stycznia 2019 przez Mateusz51 Nałogowiec (28,180 p.)
1. W 51 i 39 czytasz linijki. Linijka z 51 przepada. Zamiast BufferReader możesz użyć skanera i metody hasNextLine

2. Zamiast tablic możesz użyć listy

Podobne pytania

0 głosów
3 odpowiedzi 1,286 wizyt
pytanie zadane 24 października 2018 w Java przez MarcinZielony Użytkownik (710 p.)
0 głosów
0 odpowiedzi 310 wizyt
pytanie zadane 13 lutego 2021 w C# przez HydeFromT70s Nowicjusz (170 p.)
0 głosów
2 odpowiedzi 181 wizyt
pytanie zadane 4 maja 2016 w C i C++ przez DragonCoder Nałogowiec (36,500 p.)

93,487 zapytań

142,420 odpowiedzi

322,772 komentarzy

62,903 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...