콘솔로부터 입력받는 Scanner클래스에 대해서 알아보자
Scanner의 클래스의 위치는 java.util.Scanner에 위치해 있다.
import java.util.Scanner
Scanner 메서드
1. next()
→ 공백 전까지 입력받는다. (토큰단위)
2. nextInt()
→ 정수를 입력받는다.
3. nextLine()
→ 한 줄을 단위로 입력받는다.
4. nextBoolean()
→ bool타입을 입력받는다.
5. nextByte()
→ 바이트 타입으로 입력받는다.
6. nextShort()
→ short타입으로 입력받는다.
7. nextFolat()
-> 실수형으로 입력받는다.
8. nextDouble()
→ double형으로 입력받는다. (double타입)
사용예시
package test;
import java.util.Scanner;
public class ScannerTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 입력을 받기전에 출력문을 사용하지 않으면 콘솔창이 안나온다.
// 만약 실수로 출력문을 작성하지 않았으면
// window -> Show View -> Console을 클릭하면 콘솔창이 생성된다.
System.out.println("입력시작");
String a = sc.next();
String b = sc.nextLine();
int c = sc.nextInt();
boolean d = sc.nextBoolean();
byte e = sc.nextByte();
short f = sc.nextShort();
float g = sc.nextFloat();
double h = sc.nextDouble();
System.out.println("입력 종료");
}
}
주의 사항
Scanner를 사용하여 입력을 받을 경우 nextInt()를 사용하여 정수를 입력받고 바로 nextLine() 메서드를 사용한 경우라고 가정하고 콘솔창에 정수를 입력하고 enter를 입력한 다음 문자열을 입력하려고 하면 입력이 종료되는 현상이 발생한다.
그 이유는 입력한 정수를 nextInt()로 읽어 들이면 버퍼에는 \n이 남아있게 된다. 그러면 nextLine메서드는 \n까지만 읽어 들이고 실행이 종료된다. 따라서 의도한 대로 입력이 이루어지지 않게 되는 것이다.
해결방법은 중간에 버퍼를 비워서 \n을 제거해 주는 것이다. (= 코드 중간에 nextLine메서드를 추가)
코드 예시
package test;
import java.util.Scanner;
public class ScannerTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 입력을 받기전에 출력문을 사용하지 않으면 콘솔창이 안나온다.
// 만약 실수로 출력문을 작성하지 않았으면
// window -> Show View -> Console을 클릭하면 콘솔창이 생성된다.
System.out.println("입력시작");
int a = sc.nextInt();
sc.nextLine();
String b = sc.nextLine();
System.out.println(a + " " + b);
}
}