2011-10-05 13 views
5

Sto facendo un esercizio scolastico e non riesco a capire come fare una cosa. Per quello che ho letto, Scanner non è il modo migliore ma dal momento che l'insegnante utilizza solo Scanner, questo deve essere fatto utilizzando Scanner.Java stop reading after empty line

Questo è il problema. L'utente immetterà il testo in una matrice. Questo array può andare fino a 10 linee e gli input dell'utente terminano con una linea vuota.

Ho fatto questo:

String[] text = new String[11] 
Scanner sc = new Scanner(System.in); 
int i = 0; 
System.out.println("Please insert text:"); 
while (!sc.nextLine().equals("")){ 
     text[i] = sc.nextLine(); 
     i++;   
    } 

Ma questo non funziona correttamente e non riesco a capirlo. Idealmente, se l'utente immette:

This is line one 
This is line two 

e ora premere INVIO, wen stampa l'array dovrebbe dare:

[This is line one, This is line two, null,null,null,null,null,null,null,null,null] 

mi potete aiutare?

risposta

8
while (!sc.nextLine().equals("")){ 
     text[i] = sc.nextLine(); 
     i++;   
} 

Questo legge due righe dall'input: una che viene confrontata con la stringa vuota, quindi un'altra per archiviare effettivamente nell'array. Si vuole mettere la linea in una variabile in modo che si sta controllando e trattare con la stessa String in entrambi i casi:

while(true) { 
    String nextLine = sc.nextLine(); 
    if (nextLine.equals("")) { 
     break; 
    } 
    text[i] = nextLine; 
    i++; 
} 
+0

Molti Grazie per la tua spiegazione. Ciò ha funzionato – Favolas

+1

Non dimenticare l'input massimo di 10 linee durante la pausa. –

+0

@XenoLupus Sì. Non ho dimenticato, ma molte grazie – Favolas

1

Ecco il tipico linguaggio readline, applicato al codice:

String[] text = new String[11] 
Scanner sc = new Scanner(System.in); 
int i = 0; 
String line; 
System.out.println("Please insert text:"); 
while (!(line = sc.nextLine()).equals("")){ 
    text[i] = line; 
    i++;   
}