Java Language
Console I / O
Recherche…
Lecture des entrées utilisateur depuis la console
Utilisation de BufferedReader
:
System.out.println("Please type your name and press Enter.");
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try {
String name = reader.readLine();
System.out.println("Hello, " + name + "!");
} catch(IOException e) {
System.out.println("An error occurred: " + e.getMessage());
}
Les importations suivantes sont nécessaires pour ce code:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
Utilisation du Scanner
:
System.out.println("Please type your name and press Enter");
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
System.out.println("Hello, " + name + "!");
L'importation suivante est nécessaire pour cet exemple:
import java.util.Scanner;
Pour lire plusieurs lignes, scanner.nextLine()
plusieurs fois scanner.nextLine()
:
System.out.println("Please enter your first and your last name, on separate lines.");
Scanner scanner = new Scanner(System.in);
String firstName = scanner.nextLine();
String lastName = scanner.nextLine();
System.out.println("Hello, " + firstName + " " + lastName + "!");
Il existe deux méthodes pour obtenir des Strings
, next()
et nextLine()
. next()
renvoie le texte jusqu'au premier espace (également appelé "jeton"), et nextLine()
renvoie tout le texte nextLine()
par l'utilisateur jusqu'à ce que vous nextLine()
sur enter.
Scanner
fournit également des méthodes utilitaires pour lire des types de données autres que String
. Ceux-ci inclus:
scanner.nextByte();
scanner.nextShort();
scanner.nextInt();
scanner.nextLong();
scanner.nextFloat();
scanner.nextDouble();
scanner.nextBigInteger();
scanner.nextBigDecimal();
Si vous préfixez l'une de ces méthodes avec has
(comme dans hasNextLine()
, hasNextInt()
) renvoie true
si le type de requête est plus hasNextInt()
dans le flux. Remarque: Ces méthodes planteront le programme si l'entrée n'est pas du type demandé (par exemple, en tapant "a" pour nextInt()
). Vous pouvez utiliser un try {} catch() {}
pour éviter cela (voir: Exceptions )
Scanner scanner = new Scanner(System.in); //Create the scanner
scanner.useLocale(Locale.US); //Set number format excepted
System.out.println("Please input a float, decimal separator is .");
if (scanner.hasNextFloat()){ //Check if it is a float
float fValue = scanner.nextFloat(); //retrive the value directly as float
System.out.println(fValue + " is a float");
}else{
String sValue = scanner.next(); //We can not retrive as float
System.out.println(sValue + " is not a float");
}
En utilisant System.console
:
String name = System.console().readLine("Please type your name and press Enter%n");
System.out.printf("Hello, %s!", name);
//To read passwords (without echoing as in unix terminal)
char[] password = System.console().readPassword();
Avantages :
- Les méthodes de lecture sont synchronisées
- La syntaxe de la chaîne de format peut être utilisée
Remarque : Cela ne fonctionnera que si le programme est exécuté à partir d'une ligne de commande réelle sans rediriger les flux d'entrée et de sortie standard. Il ne fonctionne pas lorsque le programme est exécuté à partir de certains IDE, tels que Eclipse. Pour le code qui fonctionne dans les IDE et avec la redirection de flux, voir les autres exemples.
Implémentation du comportement de base de la ligne de commande
Pour les prototypes de base ou le comportement de base de la ligne de commande, la boucle suivante est utile.
public class ExampleCli {
private static final String CLI_LINE = "example-cli>"; //console like string
private static final String CMD_QUIT = "quit"; //string for exiting the program
private static final String CMD_HELLO = "hello"; //string for printing "Hello World!" on the screen
private static final String CMD_ANSWER = "answer"; //string for printing 42 on the screen
public static void main(String[] args) {
ExampleCli claimCli = new ExampleCli(); // creates an object of this class
try {
claimCli.start(); //calls the start function to do the work like console
}
catch (IOException e) {
e.printStackTrace(); //prints the exception log if it is failed to do get the user input or something like that
}
}
private void start() throws IOException {
String cmd = "";
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
while (!cmd.equals(CMD_QUIT)) { // terminates console if user input is "quit"
System.out.print(CLI_LINE); //prints the console-like string
cmd = reader.readLine(); //takes input from user. user input should be started with "hello", "answer" or "quit"
String[] cmdArr = cmd.split(" ");
if (cmdArr[0].equals(CMD_HELLO)) { //executes when user input starts with "hello"
hello(cmdArr);
}
else if (cmdArr[0].equals(CMD_ANSWER)) { //executes when user input starts with "answer"
answer(cmdArr);
}
}
}
// prints "Hello World!" on the screen if user input starts with "hello"
private void hello(String[] cmdArr) {
System.out.println("Hello World!");
}
// prints "42" on the screen if user input starts with "answer"
private void answer(String[] cmdArr) {
System.out.println("42");
}
}
Alignement des chaînes dans la console
La méthode PrintWriter.format
(appelée via System.out.format
) peut être utilisée pour imprimer des chaînes alignées dans la console. La méthode reçoit une String
avec les informations de format et une série d'objets à formater:
String rowsStrings[] = new String[] {"1",
"1234",
"1234567",
"123456789"};
String column1Format = "%-3s"; // min 3 characters, left aligned
String column2Format = "%-5.8s"; // min 5 and max 8 characters, left aligned
String column3Format = "%6.6s"; // fixed size 6 characters, right aligned
String formatInfo = column1Format + " " + column2Format + " " + column3Format;
for(int i = 0; i < rowsStrings.length; i++) {
System.out.format(formatInfo, rowsStrings[i], rowsStrings[i], rowsStrings[i]);
System.out.println();
}
Sortie:
1 1 1
1234 1234 1234
1234567 1234567 123456
123456789 12345678 123456
L'utilisation de chaînes de format avec une taille fixe permet d'imprimer les chaînes dans un aspect de type tableau avec des colonnes de taille fixe:
String rowsStrings[] = new String[] {"1",
"1234",
"1234567",
"123456789"};
String column1Format = "%-3.3s"; // fixed size 3 characters, left aligned
String column2Format = "%-8.8s"; // fixed size 8 characters, left aligned
String column3Format = "%6.6s"; // fixed size 6 characters, right aligned
String formatInfo = column1Format + " " + column2Format + " " + column3Format;
for(int i = 0; i < rowsStrings.length; i++) {
System.out.format(formatInfo, rowsStrings[i], rowsStrings[i], rowsStrings[i]);
System.out.println();
}
Sortie:
1 1 1
123 1234 1234
123 1234567 123456
123 12345678 123456
Exemples de chaînes de format
-
%s
: juste une chaîne sans formatage -
%5s
: formate la chaîne avec un minimum de 5 caractères; si la chaîne est plus courte, elle sera remplacée par 5 caractères et alignée à droite -
%-5s
:%-5s
la chaîne avec un minimum de 5 caractères; si la chaîne est plus courte, elle sera remplie à 5 caractères et alignée à gauche -
%5.10s
:%5.10s
la chaîne avec un minimum de 5 caractères et un maximum de 10 caractères; si la chaîne est inférieure à 5, elle sera remplacée par 5 caractères et alignée à droite ; si la chaîne est plus longue que 10, elle sera tronquée à 10 caractères et alignée à droite -
%-5.5s
:%-5.5s
la chaîne avec une taille fixe de 5 caractères (minimum et maximum sont égaux); si la chaîne est inférieure à 5, elle sera remplacée par 5 caractères et alignée à gauche ; si la chaîne est plus longue que 5, elle sera tronquée à 5 caractères et alignée à gauche