✅문제
Scanner scan = new Scanner(System.in);
int i = scan.nextInt(); // 1)
String s = scan.nextLine(); // 2)
이렇게 사용하면 int만 받아오고 nextLine은 그냥 건너뛰게 되는 오류가 발생하게 될 것이다.
nextInt()에서 Enter를 칠 때 발생하는 '개행문자'를 처리하지 않고 버퍼에 남기기 때문이다.
Scanner에 있는 개행문자 \r\n을 비워주어야 한다.
운영체제별 개행문자를 지정하는 문자열이 다른데 아래를 참고하면 된다.
✅ 운영체제별 개행문자(줄 바꿈)
LF(Line-Feed)
- Mac, Linux (Unix 계열) 줄 바꿈 문자열 = \n
- ASCII 코드 = 10
- 커서 위치는 그대로 두고 종이의 한라인 위로 올리는 동작
- 현재 위치에서 바로 아래로 이동
- 종이를 한 칸 올리기
CR(Carriage-Return)
- Mac 초기 모델 줄 바꿈 문자열 = \r
- ASCII 코드 = 13
- 커서 위치를 맨 앞으로 옮기는 동작
- 커서 위치를 앞으로 이동
CRLF (Carriage-Return+Line-Feed)
- Windows, DOS 줄 바꿈 문자열 = \r\n
- CR(\r) + LR(\n) 두 동작을 합쳐서 (\r\n)
- 커서를 다음라인 맨 앞으로 옮겨주는 동작
✅ 해결방법
1. 첫 번째 방법
scan.nextLine();
2. 두 번째 방법
scan.skip("[\\r\\n]+");
두 가지 방법 중 하나를 사용하면 된다.
예시
Scanner scan = new Scanner(System.in);
int i = scan.nextInt(); // 1)
//방법 1
scan.nextLine();
String s = scan.nextLine(); // 2)
------------------------------------------
Scanner scan = new Scanner(System.in);
int i = scan.nextInt(); // 1)
//방법2
scan.skip("[\\r\\n]+");
String s = scan.nextLine(); // 2)
'IT > 🚨Error🚨' 카테고리의 다른 글
[Issue] 컴퓨터 메모리 누수 해결 방법 (2) | 2024.06.03 |
---|