한 개의 문장을 입력 받아 그 속에 가장 긴 단어를 출력하는 코딩테스트 문제를 풀던 중 알고리즘 적으론 문제가 없는데 계속해서 제출하면 오류가 났다.
그 오류의 원인은 문장을 Scanner로 입력받는 곳이었다. 바로, Scanner의 입력을 next()로 받아서 발생한 문제였다.
nextLine()으로 고치니깐 문제는 바로 해결되었다. 항상 헷갈리던 이론이라 이 김에 확실하게 정리하고 넘어가려 한다.
next(), nextLine() 공통점
- String 타입으로 반환한다.
- Scanner 클래스의 메소드
next(), nextLine() 차이점
- nextLine()은 Enter(개행문자)를 치기 전까지 쓴 문자열을 모두 반환한다. 한 줄 단위로 입력을 받기에 \n도 포함한다.
- 분리자 개행문자 \n이 버퍼에 남아있다면 \n만 가져오고 입력이 종료될 수 있다.
- 위와 같은 상황을 방지하기 위해 nextXXX()를 호출한 후 nextLine()을 호출하기 전 nextLine()을 호출만 해주어 버퍼를 비워주어야 한다.
- next()은 공백(space)전 까지 입력받은 문자열을 반환한다. 분리자가 공백(space)이다.
- 즉 개행문자 \n을 무시한다. 따라서 버퍼에 \n이 남아있어도 입력을 받을 수 있다.
- 만약, next()로 공백이 포함된 문장 "it is time to study"를 입력 받는다면 맨 처음 공백 전에 있는 "it"만 출력한다.
- 따라서 공백이 포함된 문장을 입력받기 위해서는 nextLine() 메소드를 사용해야 한다.
- 공백을 기준으로 문자열을 자른다고 생각하면 된다.
'DevelopmentTools > Java' 카테고리의 다른 글
[java] Collections.sort override (0) | 2023.02.10 |
---|---|
[java] 입력받는 방법 2가지 (0) | 2023.02.10 |
[java] 코딩테스트 문법 정리 (0) | 2022.08.31 |
[programmers-java 중급] 쓰레드(Thread) (0) | 2022.07.21 |
[programmers-java 중급] 람다식(Lambda) (0) | 2022.07.21 |