Java Language
콘솔 I / O
수색…
콘솔에서 사용자 입력 읽기
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());
}
이 코드에는 다음과 같은 가져 오기가 필요합니다.
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 + "!");
이 예제에서는 다음 가져 오기가 필요합니다.
import java.util.Scanner;
두 줄 이상을 읽으려면 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 + "!");
Strings
, next()
및 nextLine()
을 얻는 방법에는 두 가지가 있습니다. next()
는 첫 번째 공백 ( "토큰"이라고도 함 nextLine()
까지 텍스트를 반환하고 nextLine()
은 사용자가 입력 할 때까지 입력 한 모든 텍스트를 반환합니다.
Scanner
는 String
이외의 데이터 유형을 읽는 유틸리티 메소드도 제공합니다. 여기에는 다음이 포함됩니다.
scanner.nextByte();
scanner.nextShort();
scanner.nextInt();
scanner.nextLong();
scanner.nextFloat();
scanner.nextDouble();
scanner.nextBigInteger();
scanner.nextBigDecimal();
hasNextLine()
, hasNextInt()
)와 같이 has
메소드로 hasNextInt()
스트림에 더 이상 요청 유형이 있으면 true
반환 true
. 주 : 입력이 요청 된 유형이 아닌 경우 (예 : nextInt()
"a"를 입력) 이러한 메소드는 프로그램을 중단시킵니다. try {} catch() {}
를 사용하여이를 방지 할 수 있습니다 ( 예외 참조).
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();
장점 :
- 읽기 방법이 동기화되었습니다.
- 형식 문자열 구문을 사용할 수 있습니다.
참고 : 표준 입력 및 출력 스트림을 리디렉션하지 않고 프로그램을 실제 명령 줄에서 실행하는 경우에만 작동합니다. Eclipse와 같은 특정 IDE 내에서 프로그램을 실행할 때 작동하지 않습니다. IDE 내에서 작동하는 코드와 스트림 리디렉션을 사용하는 다른 예제를 참조하십시오.
기본 명령 줄 동작 구현
기본 프로토 타입이나 기본 명령 줄 동작의 경우 다음 루프가 유용합니다.
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");
}
}
콘솔에서 문자열 정렬하기
System.out.format
통해 호출 된 PrintWriter.format
메서드는 콘솔에서 정렬 된 문자열을 인쇄하는 데 사용할 수 있습니다. 이 메소드는 형식 정보가있는 String
과 형식을 지정할 일련의 객체를 수신합니다.
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();
}
산출:
1 1 1
1234 1234 1234
1234567 1234567 123456
123456789 12345678 123456
고정 크기의 형식 문자열을 사용하면 테이블 크기 모양의 문자열을 고정 된 크기의 열로 인쇄 할 수 있습니다.
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();
}
산출:
1 1 1
123 1234 1234
123 1234567 123456
123 12345678 123456
형식 문자열 예제
-
%s
: 형식이 지정되지 않은 문자열 -
%5s
: 최소 5 자로 문자열을 포맷하십시오. 문자열이 더 짧으면 5 문자로 채워 지고 오른쪽 정렬됩니다. -
%-5s
: 문자열을 최소 5 자로 형식화합니다. 문자열이 더 짧으면 5 문자로 채워 지고 왼쪽 정렬됩니다. -
%5.10s
: 최소 5 자 및 최대 10 자의 문자열을 형식화하십시오. 문자열이 5보다 짧으면 5 문자로 채워 지고 오른쪽 정렬됩니다. 문자열이 10보다 길면 10 자로 잘리고 오른쪽 정렬됩니다. -
%-5.5s
: 문자열을 고정 길이 5 문자로 형식화합니다 (최소값과 최대 값은 같음). 문자열이 5보다 짧으면 5 문자로 채워 지고 왼쪽 정렬됩니다. 문자열이 5보다 길면 5 자로 잘리고 왼쪽으로 정렬됩니다.