Scanner 입력 버퍼 비우기
사용자가 어떤 값을 입력하고 엔터(\n)를 치면 엔터가 다음으로 넘어가 버리는 경우가 있다.
이를 막기 위해 버퍼를 비워주어야 한다.
[예시]
package day03;
import java.util.Scanner;
public class ScannerTest {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("올해의 목표는=>");
String goal = scanner.next(); //공백 미포함. 단어 단위로 입력받음
System.out.println("당신의 목표: " + goal);
System.out.println("올해의 목표를 문장으로 쓰세요=>");
String goal2 = scanner.nextLine(); //공백 포함. 문장 단위로 입력받음
System.out.println("당신의 구체적인 목표: " + goal2);
}
}
Scanner 클래스에서 문자열 입력받기
- next(): 띄어쓰기를 입력할 수 없고, 띄어쓰기를 구분 인자로 인식하여 띄어쓰기 전까지의 값만 입력한다.
ex) '자바 정복' => '자바'만 입력 - nextLine(): 문자열에 띄어쓰기가 가능하고, 띄어쓴 값들을 모두 입력한다.
ex) '자바 정복' => '자바 정복'
위 코드의 문제점
자바정복 → 엔터(\n)를 치면 엔터값이 다음으로 넘어가 버려서
올해의 목표를 문장으로 쓰세요=> '\n' 값이 입력된다.
이를 막아주기 위해서는 입력 버퍼를 비워야 한다.
1. scanner.nextLine();
문제가 생긴 곳에 scanner.nextLine();을 추가해주면 입력 버퍼를 비울 수 있다.
package day03;
import java.util.Scanner;
public class ScannerTest {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("올해의 목표는=>");
String goal = scanner.next(); //공백 미포함. 단어 단위로 입력받음
System.out.println("당신의 목표: " + goal);
System.out.println("올해의 목표를 문장으로 쓰세요=>");
scanner.nextLine(); //입력 버퍼 비우기 (엔터 없애주기)
String goal2 = scanner.nextLine(); //공백 포함. 문장 단위로 입력받음
System.out.println("당신의 구체적인 목표: " + goal2);
}
}
2. scan.skip("[\\r\\n]+");
package day03;
import java.util.Scanner;
public class ScannerTest {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("올해의 목표는=>");
String goal = scanner.next(); //공백 미포함. 단어 단위로 입력받음
System.out.println("당신의 목표: " + goal);
System.out.println("올해의 목표를 문장으로 쓰세요=>");
scanner.skip("[\\r\\n]+"); //입력 버퍼 비우기 (엔터 스킵하기)
String goal2 = scanner.nextLine(); //공백 포함. 문장 단위로 입력받음
System.out.println("당신의 구체적인 목표: " + goal2);
}
}