코딩 공부/Java

[Java]개행문자 입력 처리

sintory-04 2025. 2. 27. 17:21

파이썬과 다르게 자바는 입력문이 조금 다르다 ! 조금 섬세하게 다루어주어야 한다.

Scanner에서 입력을 받을 때, nextInt() 같은 메서드는 숫자를 입력받고 나면 엔터(\n)도 남게 되는데, 이 부분을 처리하지 않으면 이후에 문자열을 입력받을 때 문제가 생길 수 있다.


📌 개행 문자(\n)를 남기는 주요 메서드

다음 메서드들은 공백(스페이스, 개행 등)을 기준으로 데이터를 가져가고 \n을 남깁니다!

메서드 설명
nextInt() 정수 입력 후 개행 문자(\n) 남김
nextDouble() 실수 입력 후 개행 문자(\n) 남김
nextFloat() float 입력 후 개행 문자(\n) 남김
nextLong() long 입력 후 개행 문자(\n) 남김
nextShort() short 입력 후 개행 문자(\n) 남김
nextBoolean() Boolean 입력 후 개행 문자(\n) 남김
next() 공백 전까지만 문자열 입력 (\n 남김)
next() 공백 전까지만 문자열 입력 (\n 남김)

 


📌 개행 문자(\n)를 남기지 않는 메서드

이 메서드들은 입력의 끝까지 읽어버리기 때문에 \n이 남지 않습니다!

메서드 설명
nextLine() 한 줄 전체를 읽어버림! (\n 포함)

📌 next() VS nextLine() 의 차이점

"안녕하세요, 반갑습니다.           \n"

라는 문장이 있을 때,

next() 를 사용하면 안녕하세요, 만 읽어온다.

nextLine() 을 입력하면 안녕하세요, 반갑습니다.    까지 읽어온다.


📌 사용방법

그래서, nextLine 이 아니라면 버퍼를 제거하고 사용하자 !

// Int 받아오기
Int num = sc.nextInt()

// 버퍼 제거
sc.nextLine()

// 그런 후 String 입력 받기
String text = sc.nextLine()

📌 왜 둘의 출력이 같냐?

Scanner sc = new Scanner(System.in);
int num1 = sc.nextInt();
int num2 = sc.nextInt();

System.out.print(num1+ " ,  ");
System.out.println(num2);

// ➡ 2 ,  3
Scanner sc = new Scanner(System.in);
int num1 = sc.nextInt();
nextLine() // 버퍼 제거
int num2 = sc.nextInt();

System.out.print(num1+ " ,  ");
System.out.println(num2);

// ➡ 2 ,  3

nextInt()는 공백이나 줄바꿈 문자를 무시하고, 숫자만 처리한다.

두 번째 코드에서는 nextLine() 없이도 nextInt()가 두 번째 숫자를 정상적으로 받아오므로 두 코드는 동일한 결과를 출력한다.