본문 바로가기
공부 일지/CS공부

next()와 nextLine()의 차이

by Joshbla 2022. 7. 13.

Scanner 클래스에서 next()와 nextLine()의 차이

  • nextLine()메소드는 Enter를 치기 전까지 쓴 문자열 모두 반환한다
  • next() 메소드는 공백(space) 전까지 입력받은 문자열을 반환한다
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("A입력 : ");
        Integer A = scanner.nextInt();

        System.out.println("B입력 : ");
        String B = scanner.nextLine();
        scanner.close();

        System.out.println(A);
        System.out.println(B);
    }
}

 

이렇게 코드를 작성을 했을 때 A입력을 받고 B입력을 하기전에 A만 출력이 되고 종료가 된다.

왜 그런지 궁금하여 찾아보니 

 

next() 메서드는(nextInt...등등) 개행문자(Enter)를 무시하고 입력을 받고

nextLine()메서드는 한줄 단위로 입력을 받기 때문에 개행문자(Enter)도 포함해서 입력을 받는다.

 

예를들어 1234라고 입력하고 엔터를 쳤을 때 버퍼에는 1234\n이 존재하게 된다.

그런데 처음 메서드를 nextInt()로 받게되면 1234만 가져가고 버퍼에는 여전히 \n이 남아있게 된다.

그리고 다음 메서드를 nextLine()을 받으면 버퍼에 남아있는 \n를 가져오기때문에 종료가 되는것이다.

 

해결 하기 위해선 nextInt() 대신에 nextLine()으로 받아와서 Integer.parseInt()를 사용하는 방법이 있고

또는 두 메서드 사이에 nextLine()메서드를 그냥 하나 넣어주면 그 메서드에 의해 버퍼에 남아있는 개행문자는 사라지게된다.

 

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("A입력 : ");
        Integer A = scanner.nextInt();
		
        //개행문자를 제거하기 위한 메서드
        scanner.nextLine();
        
        System.out.println("B입력 : ");
        String B = scanner.nextLine();
        scanner.close();

        System.out.println(A);
        System.out.println(B);
    }
}

 

 

 

( 참조 블로그 :  https://velog.io/@alswp2274/JAVA-next-nextLine%EC%9D%98-%EC%B0%A8%EC%9D%B4 )

 

 

 

[ 알고리즘과 문법을 공부한 내용을 정리해보는 공간입니다. 부족한 부분이나 잘못된 부분 지적해주시면 감사하겠습니다.]

'공부 일지 > CS공부' 카테고리의 다른 글

[ 자료구조 ] 그래프 구현, BFS, DFS  (0) 2022.07.19
Integer 와 int 의 차이  (0) 2022.07.14
[알고리즘] 하노이 탑  (0) 2022.06.30
[문법] 삼항연산자  (0) 2022.06.29
[자료구조] 큐(Queue)  (0) 2022.06.29