Scanner는 자바에서 가장 많이 쓰이는 입력 클래스로 정수, 실수, 문자열을 읽어올 수 있습니다. Scanner 클래스는 자바에서 데이터를 입력한 후 엔터키를 누르면 자동 동작하도록 되어있습니다.
지금부터 여러 문자 입력 방식과 Scanner의 사용법, Scanner 실행시 생길 수 있는 오류에 대해 알아보도록 하겠습니다.
java.util.Scanner란?
- 읽은 바이트를 문자, 정수, 실수, 불린, 문자열 등 다양한 타입으로 변환하여 리턴하는 클래스
- Scanner는 입력되는 키 값을 공백으로 구분되는 토큰 단위로 읽는다.
- 개발자가 원하는 타입 값으로 쉽게 읽을 수 있다.
- 프로그램을 실행시키고 콘솔 창에 문자열을 입력하고 'Enter'를 누르면 된다
<Scanner기본 문법>
1
2
|
import java.util.Scanner; //시작시 import 문 필요
Scanner scan = new Scanner(System.in); // Scanner 객체
|
cs |
Scanner는 java.util에 속한 값입니다. 따라서 코드 상단에 java.util.Scanner를 import 해야 가능합니다.
이 라인의 뜻은 Scanner 객체인 scan을 만든다는 뜻입니다.
sc로 표기하여 사용하기도 합니다. = 뒤에 new Scanner(System.in)의 뜻은 객체 scan는 시스템이 입력을 받을 수 있는 새로운 Scanner라는 뜻입니다.
Scanner 에는 여러가지 메소드가 존재합니다.
타입별로 입력을 받는 방법이 다르다는 뜻인데요.
해당 표의 메소드는 객체 sc에서 입력받은 값을 정수형으로 되받아친다는 말입니다.
이것도 종류가 여러가지입니다.
- String일 때는 next();
- byte라면 nextByte();
- short라면 nextShort();
- int라면 nextInt();
- long이라면 nextLong();
- float라면 nextFloat();
- double nextDouble();
- String이면서 한라인 전체를 읽어오려면 nextLine()
next();
next()는 String 문자열을 입력받을 때 사용합니다.. 해당 코드를 실행하게 됐을 때,, 문자열 변수에 입력한 문자열 값이 들어가게 됩니다..
1
2
3
4
|
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String i = sc.next();
System.out.println(i);
|
cs |
만약 사용자가 입력 칸에hello world라고 입력을 하게 되면, 콘솔창에는 println(i); 에 의해 hello hello라는 글자가 출력되게 됩니다.
왜 엔터 칸 뒤의 world는 입력되지 않을까요? next()는 개행 문자를 무시하고 입력을 받기 때문입니다.
즉, 숫자를 치고 엔터를 누를 경우 엔터 전까지의 값만 입력을 받습니다.
nextLine().
문자를 여러 줄 받는 경우, nextLine() 메소드를 이용해서 한 줄씩 읽어서 처리해야 합니다.
nextLine() 한 줄 단위로 입력받기 때문에 개행 문자도 한 줄로 인식합니다.
앞서 알아본 next()로는 원하는 값(hello world)을 입력받지 못했습니다.
1
2
3
4
|
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String i = sc.nextLine();
System.out.println(input);
|
cs |
nextLine()는 \n가 나오기 전까지의 값을 입력받습니다.
그래서 사용자가 hello world를 입력하고 엔터를 누르는 순간 엔터 입력 전인 world까지의 값을 입력받습니다.
그렇기 때문에 hello world가 온전히 출력 가능합니다.
nextInt()
int형, 즉 정수형을 입력받고자 할 때 사용하는 메소드입니다
1
2
3
4
5
|
java.util.Scanner sc = new java.util.Scanner(System.in);
int a,b;
a = sc.nextInt();
b = sc.nextInt();
System.out.println(a+"값과"+b);;
|
cs |
해당 값의 a와 b에 각각 10과 6을 입력한다면 println();에는 5 값과 5라는 결과가 출력될 것입니다.
nextInt()는 띄어쓰기나 개행 문자가 나올 때까지의 값만 입력받는다고 기억하시면 되겠습니다.
예를 들어 입력값으로 ( 10 6 )이라는 값을 엔터 없이 준다면 출력 값은 10/6이 나오게 됩니다.
하지만 엔터를 이용한다면 10과 6이라는 값이 a=10 b=6으로 들어가게 되고 결과 또한 10/6으로 같은 값이 출력됩니다
nextLong()
nextLong()은 long 변수를 입력받을 때 사용합니다. long의2^64 => 10^(3*6) => 10^18 대략 1000,000,000,000,000,000 1000,000,000,000,000,000까지 입력을 받을 수 있습니다.
nextDouble(), nextFloat()등의 다양한 메서드는 위의 도표를 참고하여 적절한 곳에 이용하면 되겠습니다