BufferedReader.readLine() attend d'entrée de la console
Je suis en train de lire des lignes de texte à partir de la console. Le nombre de lignes n'est pas connu à l'avance. Le BufferedReader.readLine() lit une ligne, mais après la dernière ligne, il attend à l'entrée de la console. Ce qui devrait être fait pour éviter cela?
Veuillez voir l'extrait de code ci-dessous:
public static String[] getLinesFromConsole() {
String strLine = "";
try {
//Get the object of DataInputStream
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
String line = "";
while ((line = br.readLine()) != null)
strLine += line + "~"; //edited
isr.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
return strLine.split("~");
}
Ma conjecture est que le code ne jamais sorties de la boucle while. Et à juste titre. Une idée serait que lorsque vous lisez quelque chose de spécifique, comme "sortie", vous pouvez briser.
Ne pourrait-il pas être
vous devez utiliser une condition pour sortir de la boucle while, par exemple, l'utilisateur type de sortie
Vous semblez être de sauter à chaque seconde ligne, ce qui je pense n'est pas correct et que vous êtes en attente pour la fin du flux d'entrée qui est difficile pour la plupart des utilisateurs de la console de type. 😉
J'ai essayer votre code lorsque vous appelez readline deuxième fois while ((ligne = br.readLine()) != null) strLine += //ici, br.readLine() + "~"; console de commencer à attendre un autre personnage; vous devez utiliser la ligne de la variable OldCurmudgeon proposer cette solution. Et vous pouvez déterminer une sortie de commande.
Ne pourrait-il pas être
while ((line = br.readLine()) != null) strLine += **line** + "~";
?vous devez utiliser une condition pour sortir de la boucle while, par exemple, l'utilisateur type de sortie
Vous semblez être de sauter à chaque seconde ligne, ce qui je pense n'est pas correct et que vous êtes en attente pour la fin du flux d'entrée qui est difficile pour la plupart des utilisateurs de la console de type. 😉
J'ai essayer votre code lorsque vous appelez readline deuxième fois while ((ligne = br.readLine()) != null) strLine += //ici, br.readLine() + "~"; console de commencer à attendre un autre personnage; vous devez utiliser la ligne de la variable OldCurmudgeon proposer cette solution. Et vous pouvez déterminer une sortie de commande.
OriginalL'auteur ambar | 2013-01-29
Vous devez vous connecter pour publier un commentaire.
Le code ci-dessous peut réparer, remplacer le texte
exit
avec votre condition spécifique de la chaîne depour rerminate le processus de saisie de texte , vous avez besoin d'un 'texte' pour indiquer quit ou exit.
OriginalL'auteur TheWhiteRabbit
Lors de la lecture à partir de la console, vous devez définir une "terminaison" entrée depuis la console (à la différence d'un fichier) n'est pas "la fin" (il continue à fonctionner même après que votre programme se termine).
Il y a plusieurs solutions à votre problème:
Mettre l'entrée dans un fichier et l'utilisation IO redirection:
java ... < input-file
L'environnement de ligne de commande de crochet de votre processus avec le fichier d'entrée, et vous obtiendrez un EOF.
Type EOF-caractère de votre console. Sur Linux et Mac, Ctrl+D, sur Windows, c'est Ctrl+Z + Entrée
Arrêtez-vous lorsque vous lisez une ligne vide. De cette façon, l'utilisateur peut simplement taper Entrée.
PS: il y a un bug dans votre code. Si vous appelez
readLine()
deux fois, il va passer chaque seconde ligne.OriginalL'auteur Aaron Digulla