728x90
앞서 2023.03.14 - [국비 지원] - [JAVA] 사용자의 입력을 받을 수 있는 Scanner (1)에서
next()와 nextLine()의 차이점을 말했었다. 다시 정리하자면 아래와 같다.
next() : 문자열을 입력할 때 처음으로 나오는 화이트 스페이스(공백, 탭) 이전 문자열까지 입력 받는다.
ex) "안녕하세요. 반갑습니다." => "안녕하세요."만 반환
nextLine() : 문자열을 입력할 때 엔터 치기 전까지의 문장 전체를 입력받는다.
ex) "안녕하세요. 반갑습니다. [엔터]" => "안녕하세요. 반갑습니다." 반환
사용 시 주의할 점이 있다. 아래의 코드를 보자.
import java.util.Scanner;
public class ScannerEx {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("정수 하나를 입력하세요 : ");
int num = sc.nextInt();
System.out.print("문자열을 입력하세요 : ");
String str = sc.nextLine();
System.out.println("숫자 : " + num);
System.out.println("문자열 : " + str);
}
}
1번과 같은 결과를 원했으나 실제로는 2번과 같은 결과가 출력되는 것을 볼 수 있다.
// 1번
정수 하나를 입력하세요 : 10
문자열을 입력하세요 : 코린이 탈출기
숫자 : 10
문자열 : 코린이 탈출기
// 2번
정수 하나를 입력하세요 : 10
문자열을 입력하세요 : 숫자 : 10
문자열 :
위와 같은 일이 발생되는 이유는 무엇일까?
바로 nextInt(), next() 등 nextXXX()의 메소드들은 엔터를 쳤을 때 입력되는 줄바꿈을 읽지 못하기 때문이다.
10을 입력하고 엔터를 치면 nextInt()에 의해 10이 입력되고, 그 엔터는 nextLine()에 의해 입력된다.
엔터의 값말고는 입력된 값이 없으므로 빈 문자열이 str에 저장되는 것이다.
그렇다면 어떻게 해결할까?
방법 1 : nextLine() 대신에 next() 사용하기
import java.util.Scanner;
public class ScannerEx {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("정수 하나를 입력하세요 : ");
int num = sc.nextInt();
System.out.print("문자열을 입력하세요 : ");
String str = sc.next();
System.out.println("숫자 : " + num);
System.out.println("문자열 : " + str);
}
}
// 결과
정수 하나를 입력하세요 : 10
문자열을 입력하세요 : 코린이 탈출기
숫자 : 10
문자열 : 코린이
하지만 이는 코린이 탈출기와 같은 공백이 포함된 문자열을 완전히 출력하지 못한다.
이를 해결하기 위해서는 2번, 3번 방법을 사용하도록 한다.
방법 2 : nextXXX() 후에 먼저 nextLine() 해주기
import java.util.Scanner;
public class ScannerEx {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("정수 하나를 입력하세요 : ");
int num = sc.nextInt();
System.out.print("문자열을 입력하세요 : ");
sc.nextLine(); // 추가한 부분
String str = sc.nextLine();
System.out.println("숫자 : " + num);
System.out.println("문자열 : " + str);
}
}
// 결과
정수 하나를 입력하세요 : 10
문자열을 입력하세요 : 코린이 탈출기
숫자 : 10
문자열 : 코린이 탈출기
nextXXX() 후에 먼저 nextLine() 해줌으로써 버퍼에 남아있는 엔터를 처리할 수 있다.
방법 3 : sc.nextLine( )으로 입력받고 Integer.parseInt( )로 변환
import java.util.Scanner;
public class SannerEx {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("정수 하나를 입력하세요 : ");
int num = Integer.parseInt(sc.nextLine()); // 수정한 부분
System.out.print("문자열을 입력하세요 : ");
String str = sc.nextLine();
System.out.println("숫자 : " + num);
System.out.println("문자열 : " + str);
}
}
// 결과
정수 하나를 입력하세요 : 10
문자열을 입력하세요 : 코린이 탈출기
숫자 : 10
문자열 : 코린이 탈출기
728x90
'국비 지원 > JAVA' 카테고리의 다른 글
[JAVA] 멤버변수, 지역변수, 전역변수 (0) | 2023.05.06 |
---|---|
[JAVA] 배열 생성 new 연산자 (0) | 2023.05.03 |
[JAVA] 문자열 비교하기 : ==와 equals() (0) | 2023.05.02 |
[JAVA] 사용자의 입력을 받을 수 있는 Scanner (1) (0) | 2023.03.14 |
[JAVA] print() / printf() - 지시자 / println() (0) | 2023.03.13 |