• 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

VPS Starter Arubacloud
0 głosów
310 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 911 wizyt
pytanie zadane 24 października 2018 w Java przez MarcinZielony Użytkownik (710 p.)
0 głosów
0 odpowiedzi 196 wizyt
pytanie zadane 13 lutego 2021 w C# przez HydeFromT70s Nowicjusz (170 p.)
0 głosów
2 odpowiedzi 114 wizyt
pytanie zadane 4 maja 2016 w C i C++ przez DragonCoder Nałogowiec (36,500 p.)

92,454 zapytań

141,262 odpowiedzi

319,089 komentarzy

61,854 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.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...