Scanner
로 입력 시, 문자열 하나마다 바로 이동시킨다.
Buffer
를 사용하는 입력은 버퍼에 모았다가 한번에 이동하기 때문에 효율이 좋다.
기본적으로 BufferedReader는 한 줄을 통째로 입력받는 방법으로 주로 쓰인다.
아래 코드에서는 버퍼를 사용한 입력 BufferedReader
를 사용했다.
// BufferedReader 선언
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// String 입력 방식
String s = br.readLine();
// int 입력 방식
int i = Integer.parseInt(br.readLine());
// split 이용방법
String [] strArr = br.readLine().split(" ");
readLine()
메소드는 받은 데이터가 String
형으로 고정되며, 개행을 포함한 line 단위로 입력을 구분한다. 공백으로 입력을 구분하기 위해 StringTokenizer
이나 split(" ")
을 사용하는 방법이 있다.int
형 입력의 경우, 입력된 값을 Integer.parseInt()
로 정수형으로 바꾸어야한다.
read()
메소드는 받은 데이터를 int값으로 변형하여 읽어온다. 예를들어 txt에 저장된 1이라는 숫자를 read()를 통해 읽어오면 int형 숫자 1을 읽어오는 것이 아닌, txt형식으로 저장된 ASCII 형식의 문자값 '1'을 읽어오는 것이므로 결국 int값으론 49를 읽어오는 것이 된다.
public class Q1011 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
char c = str.charAt(0);
System.out.printf("%c",c);
}
}
reader
, Scanner
은 문자열을 입력받지 문자를 입력받는 기능이 없기 때문에 문자열로 입력받은뒤 charAt
을 이용해 문자 하나 만을 출력할 수 있도록 했다.
import java.util.Scanner;
public class Q1012 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
float input = sc.nextFloat();
System.out.printf("%f", input);
}
}
원랜 bufferedReader
을 이용했지만, Scanner
에 실수를 입력받는 기능이 있어서 이용해주었다.
그리고 %.3f
와 같은 형식으로 지정하면, 소수점 이하 넷 째 자리에서 반올림하여 소수점 이하 셋 째 자리까지 출력하라는 의미로 사용할 수 있다.
import java.util.Scanner;
public class Q1013 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int first = sc.nextInt();
int second = sc.nextInt();
System.out.printf("%d %d", first, second);
}
}
buffered로 하는방법?
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Q1014 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String first = br.readLine();
char c1 = first.charAt(0);
String second = br.readLine();
char c2 = second.charAt(0);
System.out.printf("%c %c",c2,c1);
}
}
위 방법이 아래와 같은 에러가 났다.
Exception in thread "main" java.lang.NullPointerException
at Main.main(Main.java:13)
그 이유는 주어진 문제는 개행이 아닌 공백을 두고 2개의 문자를 입력하는 입력방식인데 readline()
함수는 공백을 포함한 한 줄을 입력 받기때문에 first 변수에 입력되는 2개의 문자가 다 들어가기 때문에 그 다음번째 readline()
에서 아무것도 입력으로 주어지지 않아 Nullpoint 오류가 뜬것이다.
해결방법으로는 readline()으로 모두 읽어 온뒤, 그 string 안에서 charAt(i)로 접근하면 정답 도출이 된다.
🔽 Scanner 이용
import java.util.Scanner;
public class Q1014 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
char first = sc.next().charAt(0);
char second = sc.next().charAt(0);
System.out.printf("%c %c",second, first);
}
}
import java.util.Scanner;
public class Q1014 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
char first = sc.next().charAt(0);
char second = sc.next().charAt(0);
System.out.printf("%c %c",second, first);
}
}
import java.util.Scanner;
public class Q1017 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
System.out.printf("%d %d %d",a,a,a);
}
}
import java.util.Scanner;
public class Q1018 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String Input = sc.next();
sc.close();
String [] time = Input.split(":");
System.out.printf("%s:%s",time[0], time[1]);
}
}
입력받은 문자열을 split
으로 나누게 되면, 나누어진 글자들을 저장할 변수로 배열을 선언해주는것이 일반적이다.
입력: 연,월,일이 "."으로 구분되어 입력된다.
예시: 2013.8.5
출력: 입력받은 연,월,일을 yyyy.mm.dd 형식으로 출력한다.
예시: 2013.08.05
public class Q1019 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
String [] inArr = input.split("\\.");
System.out.printf("%04d.%02d.%02d",
Integer.valueOf(inArr[0]),
Integer.valueOf(inArr[1]),
Integer.valueOf(inArr[2])
);
}
}
.valueOf()
: 매개변수의 값을 String형으로 변환시켜주는 기능
integer.valueOf()
: 매개변수의 값을 int형으로 변환시켜주는 기능
문자열을 split(".")로 자르면 안 잘린다. split("\.")로 잘라주면 된다.
%02d
: 2칸을 사용해 출력하는데, 한 자리 수인 경우 앞에 0을 붙여 출력한다.
입력: 주민번호 앞 6자리와 뒷 7자리가 '-'로 구분되어 입력된다
예시: 000907-1121112
출력: '-'를 제외한 주민번호 13자리를 모두 붙여 출력한다.
예시: 0009071121112
public class Q1020 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
String inArr [] = input.split("-");
System.out.printf("%s%s",inArr[0],inArr[1]);
}
}