Przerwanie wczytywania danych, gdy kolejna linijka jest pusta.

0

Witam!

Mam następujący problem:

Chcę napisać program, który na wejściu dostanie nieznaną liczbę linii tekstu i odpowiednio je przetworzy (nie ważne w tej chwili jak).
Nie wiem czy to będzie 10 linijek czy 100 czy 150...
Mój problem polega na tym, że wpisze np. :

Linia 1
Linia 2
Linia 3
Linia 4

i chciałbym, żeby pętla wczytywania danych została przerwana w tym miejscu (czyli wtedy kiedy następna wczytana linia będzie pusta).

Próbowałem osiągnąć to scannerem ( Scanner(System.in) ), ale hasNextLine() zawsze zwraca true i czeka na kolejną linie, chociaż jej już nie ma.

Pozdrawiam.

0

BufferedReader bin =null;
try {
bin = new BufferedReader(new InputStreamReader(new FileInputStream("plik.txt"), "UTF-8"));
String line = null;
while ((line = bin.readLine()) != null) {
processLine(line);
}
} finally {
if (bin != null) {
try {
bin.close()
} catch (IOException exc) {
// ignore
}
}
}

To taki typowy wzor na to co chcesz zrobic. Zauwaz, ze obsluga wyjatkow jest bardzo obszerna, ale to jest poprawny sposob, zwykle bin.close() nie styknie. Jesli uzywasz Javy 7 to masz Files.readAllLines (ale to dla niewielkich plikow poniewaz chowa linijki w liscie, a ten kod co wkleilem to takie jakby strumieniowanie) albo try-catch with resources, zeby wyeliminotwac tego potrwornego zagniezdzonego try-catcha.

0

@mućka, chodzi chyba o czytanie z konsoli, bo tam hasNextLine() zwraca true. Dla czytania z pliku starczy tak:

        try
        {
            Scanner sc=new Scanner(new File("Dane.txt"));
            while(sc.hasNextLine())
            {
                String line=sc.nextLine();
                //obróbka zmiennej line
            }
            sc.close();
        }
        catch(Exception e)
        {
            System.out.println(e);
        }
0

Chodzi mi o czytanie z konsoli, nie z pliku.

0

To musisz umieć rozpoznać, że użytkownik już wszystko wpisał. Poniższy kod zakłada, że pusta linia jest sygnałem końca wprowadzania danych.

        Console con=System.console();
        System.out.println("Napisz cokolwiek a potem nacisnij ENTER - pusty wiersz konczy wprowadzanie danych\n");
        while(true)
        {
            String line=con.readLine("");
            if(line.isEmpty())
            {
                break;
            }
            //obróbka zmiennej line
        }

P.S. Nie uruchomisz tego kodu w Eclipse (w NetBeans pewnie też nie), IDE tworzą własna konsole i System.console() zwraca null.

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