Scanner와 BufferedReader의 차이
Scanner은 입력 문자를 공백 혹은 개행문자(enter)로 구분한다.
BufferedReader은 개행문자(enter)로만 구분 후 버퍼 공간에 저장해 두었다가 한번에 내보내서 빠르다.
대신 한번에 입력받은 값을 나눠줘야해서 코드가 길어진다는 단점이 있다.
import
import java.io.BufferedReader
선언
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
입력
String s = br.readLine();
int i = Integer.parseInt(br.readLine());
입력은 readLine();이라는 메소드를 사용한다.
String으로 리턴 값이 고정되어 있기 때문에, 다른 타입으로 입력을 받고자 한다면 반드시 형변환이 필요하다.
이 과정에서 IOException이 발생할 수 있다.
IOException 예외 처리
main 함수에 예외 처리를 해주거나
public static void main(String[] args) throws IOException {
}
사용 구문에 try ~ catch 문을 써주어야 한다.
public static void main(String[] args) {
try {
// ...
} catch (IOException e) {
// ...
}
}
데이터 가공
BufferedReader를 통해 읽어온 데이터는 개행문자 단위(Line 단위)로 나누어진다.
만약 이를 공백 단위로 데이터를 가공하고자 하면 따로 작업을 해주어야 한다.
이때 사용하는 것이 StringTokenizer나 String.split() 함수이다.
// StringTokenizer
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
// String.split() 함수
String arr[] = s.split(" ");
StringTokenizer의 nextToken() 함수를 쓰면 readLine()을 통해 입력 받은 값을 공백 단위로 구분하여 순서대로 호출할 수 있다.
String.split() 함수를 사용하면, 배열에 공백단위로 끊어 데이터를 저장하여 사용할 수 있다.
예시
첫번째 줄에 int W, N이 주어진다.
i+1번째 줄에 i번째 금속의 무게 Mi와 무게당 가격 Pi가 주어진다.
100 2
90 1
70 2
W, N을 각각 int 변수에 저장하고,
Mi, Pi를 2차원 배열에 저장하는 예시이다.
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
// StringTokenizer
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 첫 줄
StringTokenizer st = new StringTokenizer(br.readLine());
// 첫 줄을 w, n으로 구분하여 저장한다.
int w = Integer.parseInt(st.nextToken());
int n = Integer.parseInt(st.nextToken());
int [][] list = new int[n][2];
for(int i=0; i<n; i++) {
// i+1번째 줄
st = new StringTokenizer(br.readLine());
// i+1번째 줄을 m, p로 구분하여 저장한다.
int m = Integer.parseInt(st.nextToken());
int p = Integer.parseInt(st.nextToken());
list[i][0] = m;
list[i][1] = p;
}
// ...
}
}
참고
https://rlakuku-program.tistory.com/33
'프로그래밍 언어 > Java' 카테고리의 다른 글
[Java] 입력(Scanner) (0) | 2024.10.31 |
---|---|
[Java] 스택(Stack) (4) | 2024.10.28 |
[Java] 배열(Array) (1) | 2024.10.28 |
[Java] 클래스(Class) (0) | 2024.04.04 |