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);
    }
}

실행 결과

 

+ Recent posts