ConsoleInputEx05-입력 버퍼 비우기

CODEDRAGON Development/Java

반응형

   

   

입력버퍼 비우기

Scanner 클래스를 이용하여 입력을 받을 때 버퍼에 남은 데이터를 비우기

   

   

화이트스페이스로 인한 비정상 출력

   

   

원인

숫자입력후 바로 문자를 입력받는 경우 콘솔입력을 받는게 아니라 버퍼에 있는 데이터를 가져오게 되어 바로 문자입력을 받지 않고 출력해버립니다. (즉, 버퍼에 있는 \n문자를 가져오게 됩니다)

숫자형 데이터 입력을 받은 직후 문자를 입력받아야 한다면 버퍼를 비워준후 입력을 받아야 합니다.

   

   

입력버퍼 비우는 방법

입력전에 버퍼를 비워주는 구문을 삽입해 줍니다.

  • input.nextLine();
  • input.skip("[\\r\\n]+");

   

   

버퍼에 입력된 문자열을 개행문자 \n 까지 가져오기

input.nextLine();

   

입력 버퍼에 남아있는 개행문자 '\r\n' 제거하기

input.skip("[\\r\\n]+");

   

   

   

버퍼 비운후 정상 출력

   

   

   

소스코드

 

비정상 출력 코드

public class ConsoleInputEx05 {

   

        public static void main(String[] args) {

   

        java.util.Scanner input = new java.util.Scanner(System.in);

   

        //문제발생

        System.out.println("정수입력 > ");

        int n = input.nextInt();

        System.out.println("n: " + n);

        System.out.println("원하는 요일을 입력하세요(영문 소문자) > ");

        String str = input.nextLine();

        System.out.println("str: " + str);

          

        }

}

  

   

   

해결방법1 - input.nextLine();

public class ConsoleInputEx05 {

   

        public static void main(String[] args) {

   

        java.util.Scanner input = new java.util.Scanner(System.in);

   

         //방법 1 - input.nextLine();

        System.out.println("정수입력 > ");

        int n = input.nextInt();

        System.out.println("n: " + n);

        System.out.println("원하는 요일을 입력하세요(영문 소문자) > ");

          

        input.nextLine();       //버퍼비우기 

                                                //버퍼에 입력된 문자열을 개행문자 \n 까지 가져오기

        String str = input.nextLine();

        System.out.println("str: " + str);

          

          

        //방법 2 - input.skip("[\\r\\n]+");

        System.out.println("정수입력 > ");

        int n = input.nextInt();

        System.out.println("n: " + n);

        System.out.println("원하는 요일을 입력하세요(영문 소문자) > ");

          

        input.skip("[\\r\\n]+");        //버퍼비우기

                                                                //입력 버퍼에 남아있는 개행문자 '\r\n' 제거하기

        String str = input.nextLine();

        System.out.println("str: " + str);

        }

}

   

   

해결방법2 - input.skip("[\\r\\n]+");

public class ConsoleInputEx05 {

   

        public static void main(String[] args) {

   

        java.util.Scanner input = new java.util.Scanner(System.in);

             

        //방법 2 - input.skip("[\\r\\n]+");

        System.out.println("정수입력 > ");

        int n = input.nextInt();

        System.out.println("n: " + n);

        System.out.println("원하는 요일을 입력하세요(영문 소문자) > ");

          

        input.skip("[\\r\\n]+");        //버퍼비우기

                                                                //입력 버퍼에 남아있는 개행문자 '\r\n' 제거하기

        String str = input.nextLine();

        System.out.println("str: " + str);

        }

}