Java Language
Konsol I / O
Sök…
Läser användarinmatning från konsolen
Använda 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());
}
Följande import behövs för denna kod:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
Använda 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 + "!");
Följande import behövs för detta exempel:
import java.util.Scanner;
Om du scanner.nextLine()
läsa mer än en rad scanner.nextLine()
upprepade gånger:
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 + "!");
Det finns två metoder för att få Strings
, next()
och nextLine()
. next()
returnerar text fram till det första utrymmet (även känt som "token"), och nextLine()
returnerar all text som användaren matade in tills han trycker på enter.
Scanner
tillhandahåller också verktygsmetoder för att läsa andra datatyper än String
. Dessa inkluderar:
scanner.nextByte();
scanner.nextShort();
scanner.nextInt();
scanner.nextLong();
scanner.nextFloat();
scanner.nextDouble();
scanner.nextBigInteger();
scanner.nextBigDecimal();
Prefixing av någon av dessa metoder med has
(som i hasNextLine()
, hasNextInt()
) returnerar true
om strömmen har mer av begäran. Obs: Dessa metoder kraschar programmet om ingången inte är av den begärda typen (till exempel att skriva "a" för nextInt()
). Du kan använda ett try {} catch() {}
att förhindra detta (se: Undantag )
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");
}
Använda 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();
Fördelar :
- Läsmetoder synkroniseras
- Formatsträngsyntax kan användas
Obs : Detta fungerar bara om programmet körs från en verklig kommandorad utan att omdirigera standardinmatnings- och utgångsströmmarna. Det fungerar inte när programmet körs från vissa IDE: er, till exempel Eclipse. För andra koder som fungerar inom IDE: er och med stream omdirigering, se de andra exemplen.
Implementera grundläggande kommandoradsbeteende
För grundläggande prototyper eller grundläggande kommandoradsbeteende är följande slinga praktiskt.
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");
}
}
Justera strängar i konsolen
Metoden PrintWriter.format
(kallas via System.out.format
) kan användas för att skriva ut riktade strängar i konsolen. Metoden får en String
med formatinformation och en serie objekt att formatera:
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();
}
Produktion:
1 1 1
1234 1234 1234
1234567 1234567 123456
123456789 12345678 123456
Använda formatsträngar med fast storlek tillåter att skriva ut strängarna i ett tabellliknande utseende med kolumner med fast storlek:
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();
}
Produktion:
1 1 1
123 1234 1234
123 1234567 123456
123 12345678 123456
Formera exempel på strängar
-
%s
: bara en sträng utan formatering -
%5s
: formatera strängen med minst 5 tecken; Om strängen är kortare kommer det att vadderade till 5 tecken och högerjusterat -
%-5s
: formatera strängen med minst 5 tecken; Om strängen är kortare kommer det att vadderade till 5 tecken och vänsterställt -
%5.10s
: formatera strängen med minst 5 tecken och högst 10 tecken; om strängen är kortare än 5 paddas den till 5 tecken och högerinriktas ; om strängen är längre än 10 kommer den att avkortas till 10 tecken och högerinriktad -
%-5.5s
: formatera strängen med en fast storlek på 5 tecken (minimum och maximum är lika); om strängen är kortare än 5 paddas den till 5 tecken och lämnas i linje; om strängen är längre än 5 kommer den att trunkeras till 5 tecken och vänsterinriktad