잉?

[Java] Scanner 클래스의 메소드 next(), nextLine() 차이 알아보기 + 주의점! 본문

자바(Java)

[Java] Scanner 클래스의 메소드 next(), nextLine() 차이 알아보기 + 주의점!

Jye_647 2023. 5. 22. 23:49

Scanner는 값을 입력받을 때 사용하는 클래스이다.

이 클래스 안에 다양한 메소드가 있는데 그중 next()와 nextLine()을  짚고 넘어가겠다.

 

일단 코드 구조를 보면 어떻게 사용하는지 알 수 있다. 

Scanner sc = new Scanner(System.in); // sc라는 Scanner 객체를 선언한다.
String input = sc.next(); // input이라는 변수에 sc.next()메소드를 통해 값을 입력한다.
System.out.println(input); // 입력한 값을 출력한다.

 


더 자세히 알아보자.

next()와 nextLine()은 문자열을 반환하는 메서드이다.

그렇다면 이 둘의 차이점은 무엇일까?

next()는 개행문자를 무시하고 입력을 받는다. 즉, 공백 전까지만 입력받는다. 

nextLine()은 개행문자를 포함해서 입력받는다. 즉, 한 줄 단위로 입력을 받는다.

 

여기서 개행문자라는 것은 \n, \r... 공백을 말한다.


next()와 nextLine()을 사용할 때의 주의점은?

예시를 들어보자면 아래의 코드를 작성했다. 

Scanner sc = new Scanner(System.in);
String title = sc.nextLine();
float star = sc.nextFloat();
String input1 = sc.nextLine();
String input2 = sc.nextLine();
String input3 = sc.nextLine();
String input4 = sc.nextLine();
String input5 = sc.nextLine();

----------------------------------------------------------------------------------
[예상 출력결과]
입력)					출력)
Dahlia					Dahlia
5.0					별점 : 5 (100.0%)
하나					1. 하나 
둘					2. 둘
셋					3. 셋
넷					4. 넷
다섯					5. 다섯

하지만 결과는 이렇다. 

별점 이후로 밀려서 출력이 됐다.

그 이유가 무엇일까? 알아보자.

 

nextLine()은 공백을 포함한다.

next()는 공백을 포함하지 않는다. 즉, 공백 전까지만 입력받는다.

float star = sc.nextFloat();
String input1 = sc.nextLine();

코드를 보면 star라는 변수에 값을 넣어준 뒤 enter를 누르고 다음 input1 변수에 값을 넣어준다.

여기서 답이 나왔다.

next() 즉, nextFloat()는 enter(공백) 전까지의 값을 포함한다.

이 enter(공백)는 다음 input1의 값으로 들어가게 되는 것이다.

왜냐? nextLine()은 공백을 포함하기 때문에.

그래서 한 줄씩 밀려서 출력되었던 것이다. 

 

그렇기에 next()와 nextLine() 사이에 공백을 먹어줄 nextLine() 메서드를 한번 더 추가해 줘야 한다.

Scanner sc = new Scanner(System.in);
String title = sc.nextLine();
float star = sc.nextFloat();
sc.nextLine();
String input1 = sc.nextLine();
String input2 = sc.nextLine();
String input3 = sc.nextLine();
String input4 = sc.nextLine();
String input5 = sc.nextLine();

↓ sc.nextLine(); 추가 후 결과값


next()와 nextLine()의 차이점과 주의점에 대해 알아보는 시간이 되었다.

Comments