✅문제

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

+ Recent posts