Java Language
Konsolen-E / A
Suche…
Benutzereingaben von der Konsole lesen
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());
}
Die folgenden Importe werden für diesen Code benötigt:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
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 + "!");
Der folgende Import wird für dieses Beispiel benötigt:
import java.util.Scanner;
Um mehr als eine Zeile zu lesen, rufen Sie scanner.nextLine()
wiederholt auf:
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 + "!");
Es gibt zwei Methoden, um Strings
, next()
und nextLine()
. next()
gibt den Text bis zum ersten Leerzeichen zurück (auch als "Token" bezeichnet), und nextLine()
gibt den gesamten vom Benutzer eingegebenen Text zurück, bis er die Eingabetaste drückt.
Scanner
bietet auch Dienstprogrammmethoden zum Lesen anderer Datentypen als String
. Diese schließen ein:
scanner.nextByte();
scanner.nextShort();
scanner.nextInt();
scanner.nextLong();
scanner.nextFloat();
scanner.nextDouble();
scanner.nextBigInteger();
scanner.nextBigDecimal();
Das Präfixieren einer dieser Methoden mit has
(wie in hasNextLine()
, hasNextInt()
) gibt true
zurück true
wenn der Stream weitere hasNextInt()
. Hinweis: Diese Methoden führen zum Absturz des Programms, wenn die Eingabe nicht vom angeforderten Typ ist (z. B. "a" für nextInt()
). Sie können einen try {} catch() {}
, um dies zu verhindern (siehe: Ausnahmen ).
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");
}
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();
Vorteile :
- Lesemethoden werden synchronisiert
- Formatstringsyntax kann verwendet werden
Hinweis : Dies funktioniert nur, wenn das Programm von einer echten Befehlszeile aus ausgeführt wird, ohne die Standardeingabe- und -ausgabeströme umzuleiten. Es funktioniert nicht, wenn das Programm innerhalb bestimmter IDEs ausgeführt wird, z. B. Eclipse. In den anderen Beispielen finden Sie Code, der in IDEs und mit Stream-Umleitung funktioniert.
Grundlegendes Befehlszeilenverhalten implementieren
Für grundlegende Prototypen oder grundlegendes Befehlszeilenverhalten ist die folgende Schleife hilfreich.
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");
}
}
Zeichenketten in der Konsole ausrichten
Die Methode PrintWriter.format
(aufgerufen über System.out.format
) kann verwendet werden, um ausgerichtete Zeichenfolgen in der Konsole zu drucken. Die Methode erhält einen String
mit den Formatinformationen und einer Reihe von zu formatierenden Objekten:
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();
}
Ausgabe:
1 1 1
1234 1234 1234
1234567 1234567 123456
123456789 12345678 123456
Die Verwendung von Formatzeichenfolgen mit fester Größe ermöglicht das Drucken der Zeichenfolgen in Tabellenform mit Spalten mit fester Größe:
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();
}
Ausgabe:
1 1 1
123 1234 1234
123 1234567 123456
123 12345678 123456
Beispiele für Formatstrings
-
%s
: Nur eine Zeichenfolge ohne Formatierung -
%5s
: Formatieren Sie die Zeichenfolge mit mindestens 5 Zeichen. Wenn die Zeichenfolge kürzer ist, wird sie auf 5 Zeichen aufgefüllt und nach rechts ausgerichtet -
%-5s
: Formatieren Sie die Zeichenfolge mit mindestens 5 Zeichen. Wenn die Zeichenfolge kürzer ist, wird sie auf 5 Zeichen aufgefüllt und links ausgerichtet -
%5.10s
: Formatieren Sie die Zeichenfolge mit mindestens 5 und maximal 10 Zeichen. Ist die Zeichenfolge kürzer als 5, wird sie auf 5 Zeichen aufgefüllt und nach rechts ausgerichtet. Wenn die Zeichenfolge länger als 10 ist, wird sie auf 10 Zeichen gekürzt und rechtsbündig ausgerichtet -
%-5.5s
: Formatieren Sie die Zeichenfolge mit einer festen Größe von 5 Zeichen (Minimum und Maximum sind gleich). Ist die Zeichenfolge kürzer als 5, wird sie auf 5 Zeichen aufgefüllt und linksbündig ausgerichtet. Wenn der String länger als 5 ist, wird er auf 5 Zeichen gekürzt und linksbündig ausgerichtet