[Java] 입출력
2024. 1. 21. 15:25ㆍAlgorithm/with Java
1. 입력
가. Scanner
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
String[] foods = new String[num];
for(int i=0; i<num; i++){
foods[i] = sc.next();
}
for(String food : foods){
System.out.println(food);
}
sc.close();
}
}
가장 쉽고 간편한 방법.
하지만 느리다.
나. BufferedReader
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
public class Test2 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int num = Integer.parseInt(st.nextToken());
String[] foods = new String[num];
for(int i=0; i<num; i++){
st = new StringTokenizer(br.readLine());
foods[i] = st.nextToken();
}
for(String food : foods){
System.out.println(food);
}
br.close();
}
}
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
: 데이터를 버퍼에 저장해 두었다가 전달.
: 입력받는 데이터의 수가 커질 수 록 속도면에서 빠르고 효율적.new InputStreamReader(System.in)
: 입력을 바이트 단위로 읽어서 문자 단위로 반환하는 클래스import java.io.IOException;
,throws IOException
: BufferedReader에서 던지는 에러가 있기 때문에 필요함.st = new StringTokenizer(br.readLine());
: 줄이 바뀔 때마다 새로운StringTokenizer
생성해야함.st.nextToken();
: 다음 문자열 토큰 반환.int num = Integer.parseInt(st.nextToken());
: 정수를 입력받는 방법.
1) StringTokenizer
- 생성자
- 메서드
2. 출력
가. System.out.println()
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
public class Test2 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int num = Integer.parseInt(st.nextToken());
String[] foods = new String[num];
for(int i=0; i<num; i++){
st = new StringTokenizer(br.readLine());
foods[i] = st.nextToken();
}
for(String food : foods){
System.out.println(food);
}
br.close();
}
}
출력할 데이터가 많으면 System.out.println
가 시간을 많이 사용한다.
나. BufferedWriter
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
public class Test2 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int num = Integer.parseInt(st.nextToken());
String[] foods = new String[num];
for(int i=0; i<num; i++){
st = new StringTokenizer(br.readLine());
foods[i] = st.nextToken();
}
for(String food : foods){
bw.write(food);
bw.newLine();
}
br.close();
br.flush();
br.close();
}
}
BufferedWriter
: 버퍼를 사용하여 쓰기.OutputStreamWriter
: 문자 스트림을 바이트 스트림으로 변환한다.bw.write(food + "\n");
: 출력.bw.newLine();
: 개행.bw.flush();
: 버퍼 사용 시flush()
습관화.
다. StringBuilder
import java.lang.StringBuilder;
...
StringBuilder sb = new StringBuilder();
for(int i = 0 ; i < n; i++) {
sb.append(data[i] + " ");
}
System.out.println(sb.toString());
BufferedWriter
랑 크게 차이가 없음.
Java의 String
은 immutable한 객체이기 때문에 수정하면 성능이 저하된다.
이에 문자열을 빈번하게 수정하는 경우 StringBuilder
를 활용한다.
(Single thread에선 StringBuilder
, multi thread에선 StringBuffer
사용하자)
'Algorithm > with Java' 카테고리의 다른 글
[Java] 순열과 조합 (0) | 2024.01.31 |
---|---|
[알고리즘] 풀었던 문제 (241031) (0) | 2024.01.31 |
[알고리즘] 풀었던 문제 (240131) (0) | 2024.01.31 |
[알고리즘] 9658. 돌 게임 4 (0) | 2024.01.23 |
[알고리즘] 3307. 최장 증가 부분 수열 (0) | 2024.01.21 |