기본적인 데이터 타입들을 Scanner 의 메소드를 사용하여 입력받을 수 있다.
공백(띄어쓰기) or 개행(줄 바꿈)을 기준으로 읽는다.
입출력 스트림 (X)
보조 스트림 (X)
문자 파일/바이트 기반 입력 스트림에서 라인 단위 문자열을 쉽게 읽기 위한 클래스 (O)
import java.util.Scanner;
// 문법
클래스_이름 객체_이름 = new 클래스_이름();
// 예시 : 생성된 Scanner 를 in 변수에 저장
Scanner in = new Scanner(System.in);
바이트 기반 입력 스트림으로부터 scanner 를 생성
Scanner 라는 클래스를 사용할 것이기 때문에, 클래스 이름에는 Scanner 가 들어가야 한다.
객체 이름은 편한 대로 지정하면 되나, 일반적으로 Scanner 의 경우 객체 이름은 in, input, sc, scan 4가지가 가장 많이 쓰인다.
Scanner 을 생성할 때는 System.in 이 들어간다.
in.nextByte() // byte 형 입력 및 리턴
in.nextShort() // short 형 입력 및 리턴
in.nextInt() // int 형 입력 및 리턴
in.nextLong() // long 형 입력 및 리턴
in.nextFloat() // float 형 입력 및 리턴
in.nextDouble() // double 형 입력 및 리턴
in.nextBoolean() // boolean 형 입력 및 리턴
in.next() // String 형 입력 및 리턴 (공백을 기준으로 한 단어를 읽음)
in.nextLine() // String 형 입력 및 리턴 (개행을 기준으로 한 줄을 읽음)
import java.util.Scanner; // Scanner 클래스 호출
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in); // Scanner 객체 생성
byte a = in.nextByte(); // byte 형 입력 및 리턴
short b = in.nextShort(); // short 형 입력 및 리턴
int c = in.nextInt(); // int 형 입력 및 리턴
long d = in.nextLong(); // long 형 입력 및 리턴
float e = in.nextFloat(); // float 형 입력 및 리턴
double f = in.nextDouble(); // double 형 입력 및 리턴
boolean g = in.nextBoolean(); // boolean 형 입력 및 리턴
String h = in.next(); // String 형 입력 및 리턴 (공백(띄어쓰기)을 기준으로 한 단어를 읽음)
String i = in.nextLine(); // String 형 입력 및 리턴 (개행(줄 바꿈)을 기준으로 한 줄을 읽음)
}
}
String i = in.nextLine()
Scanner 는 보조 스트림 없이, 쉽게 라인 단위 문자열을 읽기 위해 nextLine() 메소드를 제공함
기본적으로 next + Type() 의 조합으로 사용된다. (nextInt(), nextDouble(), next(), nextLine() ...)
예시 1 : Cat
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String str = in.next();
System.out.println(str);
}
}
/* 입력 내용
Cat is perfect animal */
/* 출력 결과
Cat */
예시 2 : Cat is perfect animal
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String str1 = in.next();
String str2 = in.next();
String str3 = in.next();
String str4 = in.next();
System.out.println(str1);
System.out.println(str2);
System.out.println(str3);
System.out.println(str4);
}
}
/* 입력 내용 1
Cat is perfect animal */
/* 출력 결과 1
Cat
is
perfect
animal */
/* 입력 내용 2 : 한 문장당 한 개행씩 입력하더라도, 출력 결과1 과 동일한 결과가 나온다
Cat
is
perfect
animal */
/* 출력 결과 2
Cat
is
perfect
animal */
'한 단어'
공백을 기준으로 문장 한 개만 읽는다.
→ 예시 2 처럼 출력 하기 위해서(4개의 문장을 모두 읽기)는 next() 을 4번 써주어야 한다.
예시 3 : 특정 곱만 제외하는 구구단
import java.util.Scanner;
public class W01 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int passNum = sc.nextInt(); // 출력 제외 할 구구단 값
for (int i = 2; i <= 9; i++) {
if (i == passNum) {
continue;
}
for (int j = 2; j <= 9; j++) {
System.out.println(i + "곱하기" + j + "는" + (i * j) + "입니다.");
}
}
}
}
/* 입력
2
*/
/* 출력 결과 (2의 곱셈을 제외하고 모두 출력됨)
3곱하기2는6입니다.
...
7곱하기8는56입니다.
...
9곱하기8는72입니다.
9곱하기9는81입니다.
*/
예시 4 : 특정 곱만 출력하는 구구단
import java.util.Scanner;
public class W01 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int passNum = sc.nextInt(); // 특정 구구단만 출력 할 값
for (int i = 2; i <= 9; i++) {
for (int j = 2; j <= 9; j++) {
if (i == passNum) {
System.out.println(i + "곱하기" + j + "는" + (i * j) + "입니다.");
}
}
}
}
}
/* 입력
2
*/
/* 출력 결과 (2의 곱셈만 모두 출력됨)
2곱하기2는4입니다.
2곱하기3는6입니다.
2곱하기4는8입니다.
2곱하기5는10입니다.
2곱하기6는12입니다.
2곱하기7는14입니다.
2곱하기8는16입니다.
2곱하기9는18입니다.
*/
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String str = in.nextLine();
System.out.println(str);
}
}
/* 입력 내용
Cat is perfect animal */
/* 출력 결과
Cat is perfect animal */
'한 줄'
한 줄에 입력된 여러 문장들을 읽는다.
→ nextLine() 에는 공백이 무의미하다!
잘못된 코드
// 예시 1
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String str1 = in.next();
String str2 = in.nextLine();
System.out.println(str1);
System.out.println(str2);
}
}
/* 입력 내용
Cat is perfect animal */
/* 출력 결과
Cat
is perfect animal */
next() 메소드 : Cat 까지 읽는다.
→ next() 에서 공백을 입력받으면, 공백 전 문자까지 읽어 들여 str1 에 저장
nextLine() 메소드 : 나머지 문자열을 읽는데, 두 번째 줄에 공백이 포함되어 나왔다.
→ nextLine() 을 쓰면, 남아있던 공백부터 한 줄을 읽기 때문에 str2 에는 공백부터 시작하여 한 줄을 읽어 들인 문자가 담긴다
// 예시 2
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String str1 = in.next();
String str2 = in.next();
String str3 = in.nextLine();
String str4 = in.nextLine();
System.out.println(str1);
System.out.println(str2);
System.out.println(str3);
System.out.println(str4);
}
}
/* 입력 내용
Cat is perfect animal */
/* 출력 결과
Cat
is
perfect
Cat
is
perfect */
next() 메소드 : st1 에는 "Cat" 이 저장되고, 다음 개행에서 "is" 를 읽어 str2 에 저장된다.
nextLine() 메소드
올바른 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String str1 = in.next();
String str2 = in.next();
in.nextLine();
String str3 = in.nextLine();
String str4 = in.nextLine();
System.out.println(str1);
System.out.println(str2);
System.out.println(str3);
System.out.println(str4);
}
}
/* 입력 내용
Cat
is
perfect
animal */
/* 출력 결과
Cat
is
perfect
animal */