Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di el92
    Registrato dal
    Dec 2014
    Messaggi
    177

    [java]lettura file da input e StringTokenizer

    ciao è da poco che sto creando vere e proprie classi e ho qualche problemino con le classi BufferedReader eStringTokenizer. il problema è il seguente:
    leggi un file riga per riga e conta le parole di ogni riga
    La mia soluzione è:
    codice:
    import java.io.*;
    import java.util.StringTokenizer;
    public class Leggofile{
        public static void main(String[] arg)throws Exception {
            File input = new File("ccc.txt"); 
            BufferedReader br=new BufferedReader(new FileReader(input));
            String riga=br.readLine();
            
            for(int i=0;riga!=null;i++){
                System.out.print(i);
                System.out.print(" : ");
                System.out.println(riga);
                riga=br.readLine();
            }
                StringTokenizer st=new StringTokenizer(riga," ");
                int count=1;
                while(st.hasMoreTokens()){
                    String t=st.nextToken();
                    count++;
                }
                System.out.println(count);
                riga=br.readLine();
                    
            }
        }
    L'esercizio mi viene in parte;il compilatore in esecuzione mi segnala un errore di tipo NullPointerException
    per lo StringTokenizer. Perchè mi dà quell'errore?Non è giusto usare la classe StringTokenizer?
    Ultima modifica di el92; 05-02-2015 a 17:54

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Anzitutto, il compilatore (javac) serve a compilare (ottenere i file .class), mentre l'esecutore (java, la JVM) serve ad eseguire.
    Chi lancia una NullPointerException non è il compilatore, ma l'esecutore.
    E' bene avere chiaro fin da subito la differenza fra le due fasi: compilazione ed esecuzione.

    In secondo luogo, lo StringTokenizer può andare benissimo... ma va usato secondo logica (premetto che non ho guardato cosa vi fai con lo StringTokenizer, mi sono solo occupato della NullPointerException).
    Tu hai un ciclo for che cicla sulle righe del file... legge ciascuna riga finchè la lettura non produce una stringa nulla. Quando viene "letta" una riga nulla significa che il file è finito ed il ciclo for esce... e tu a questo punto crei uno StringTokenizer... passandogli proprio la stringa nulla (è nulla, altrimenti saresti ancora dento il ciclo for). Questo, ovviamente, non va bene. La logica va rivista: lo StringTokenizer va usato dentro il ciclo for (cioè per ciascuna riga), non fuori, quando il file ormai è già stato letto tutto e la riga è nulla.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di el92
    Registrato dal
    Dec 2014
    Messaggi
    177
    ciao grazie per la risposta hai ragione alla fine è venuto tutto correttamente.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.