반응형
Scanner클래스에는 String을 입력받는 메서드 next()와 nextLine()이 있다.
공통점은 둘 다 문자열로 반환시켜준다는 것이다.
next() 메서드는 공백(space)전까지 입력받은 문자열을 반환한다는 것이다.
nextLine() 메서드는 Enter를 치기 전까지 쓴 문자열 모두를 반환한다는 것이다.
Scanner.next()
Scanner in = new Scanner(System.in);
String str = in.next();
// next()는 공백 문자를 받아들이지 않는다.
// "a a"를 입력해봤을때를 가정해보자
System.out.println(str);
// 입력
a a
/* 출력
a
*/
출력결과를 보면 a a 를 입력을 받았지만 처음에 a만 저장되어 출력되는 것을 확인할 수 있다. 다시 말해 next는 토큰의 개념으로 문자열을 입력받는데 해당 토큰에서 공백 문자는 구분자로 인식해 앞에 있는 a만 저장되는 것이다.
즉, 쉽게 말하면 Enter키는 물론 Space키도 구분자로 인식하여 저장되지 않는다.
반응형
Scanner.nextLine()
Scanner in = new Scanner(System.in);
String str = in.nextLine();
// nextLine()은 공백문자도 모두 저장하여 출력한다.
// "a a"를 입력해봤을때를 가정해보자.
System.out.println(str);
// 입력
a a
/* 출력
a a
*/
공백 문자와 상관없이 콘솔 창 한 줄(Line)에 있으면 모두 문자열로 인식해 String변수로 리턴한다. a a 를 입력값으로 넣어주면 공백 문자와 상관없이 모두 저장된 것을 확인할 수 있다.
next()와 nextLine() 동시에 사용하면?
Scanner in = new Scanner(System.in);
String str1 = in.next();
System.out.println("str1 : " + str1);
String str2 = in.nextLine();
System.out.println("str2 : " + str2);
// 입력
a a
/* 출력 결과
str1 : a
str2 : a
*/
위와 같이 나오는 이유는 next()로 받고 남은 " a"가 In.nextLine()으로 넘어가기 때문이다. " a" 라는 버려진 문자열은 지금 버퍼에 남겨져 있는 상태인데 버퍼를 처리하지 않고 다시 str2를 입력받으려고 하면 버퍼 측에서는 이미 저장되어 있는 " a"를 출력하는 것이다.
해결방법 : 버퍼 처리방법
Scanner in = new Scanner(System.in);
String str1 = in.next();
System.out.println("str1 : " + str1);
in.nextLine(); // nextLine() 메서드 호출
String str2 = in.nextLine();
System.out.println("str2 : " + str2);
// 입력
a a
b b
/* 출력 결과
str1 : a
str2 : b b
*/
위와 같이 nextLine()으로 변수에 담기 전에 메서드만 호출해 버퍼를 지워주면 문제가 해결된다.
반응형
'Language > Java' 카테고리의 다른 글
[Java / 자료구조] 큐 (Queue) 정리 (0) | 2022.09.25 |
---|---|
[Java / 자료구조] 스택 (Stack) 정리 (0) | 2022.09.25 |
[Java] Set 정리 (0) | 2022.09.25 |
[Java] 리스트 (List) 정리 (2) | 2022.09.24 |
[Java] 자바 컬렉션 프레임워크(Collection Framework) 정리 (0) | 2022.09.24 |