2012-12-21 9 views
9

Sono un amatore di rango quando si parla di Java, quindi scusami se sembra stupido :-P Ho il seguente codice che è progettato per contare il numero di righe in un file:Ripristino di uno scanner .nextLine()

while (scanNumOfLines.hasNextLine())  
    { 
    NumOfLines ++; 
    scanNumOfLines.nextLine(); 
    } 
    System.out.println("NumOfLines = "+NumOfLines); 

Quindi conta bene, ma voglio riutilizzare lo scanner per un altro scopo, ma la nextLine si è spostato l'ultima riga del file, e voglio ripristinare di nuovo al prima linea.

(Invece, ho dovuto usare un altro scanner per l'altro scopo, e per me questo sembra meno elegante di quanto dovrebbe essere.)

Sono sicuro che ci deve essere un metodo di scanner che azzera il contatore a zero?

Grazie

CJ

+0

Che contatore? Questo contatore è nel tuo codice, non nello 'Scanner'. – EJP

risposta

4

Si dovrà ridichiarare la Scanner. Quando invochi nextLine(), la riga viene rimossa dal buffer e scartata in modo efficace da Scanner.

Quindi, essenzialmente, lo è un metodo per farlo: è il costruttore.

Scanner scanNumOfLines = new Scanner(myFile); 

Non c'è un "contatore" nell'oggetto Scanner. Invece pensarlo come più come un nastro trasportatore. La cintura non ha conoscenza o cura di ciò che c'è sopra. Continua a sputare le cose contro di te mentre ci sono oggetti lasciati su di esso. E una volta che li prendi, se ne sono andati per sempre.

8

Questo è impossibile da fare.

Il motivo per non includerlo è l'ampia gamma di tipi di input supportati. Un esempio sono i flussi. Questi non memorizzano i risultati dopo che sono stati passati, quindi non supportano il reset.

Quindi il modo elegante è creare un nuovo Scanner. Se le assegni molte impostazioni personalizzate, crea un metodo di produzione.

0
File file = new File("StoreData.txt"); 

Scanner reader = new Scanner(new FileInputStream(file)); 
while (reader.hasNext()) { 
     k++; 
     reader.nextLine(); 
} 
reader.close(); 
reader=null;  
//reset scanner   
reader=new Scanner(new FileInputStream(file)); 
while (reader.hasNext()) { 
    System.out.println(reader.nextLine());    
} 
+2

Solo codice? dov'è la tua spiegazione? –

1

Mi rendo conto che questo è già stato risposto, ma se sto guardando questa roba sono sicuro che qualcun altro è troppo, così ho pensato di contribuire il modo in cui sono andato circa la risoluzione di questo problema: Come il mio problema mi richiedeva di leggere un file un numero di volte in base all'input dell'utente, la mia classe di test ha un ArrayList di scanner che legge il file, quindi si elimina una volta che non è più necessario. Il modo in cui l'ho impostato non è mai superiore a 1 scanner in ArrayList, ma ArrayList è utile per aggiungere e rimuovere oggetti.