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();
}
}
Code language: JavaScript (javascript)
가장 쉽고 간편한 방법.
하지만 느리다.
나. 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();
}
}
Code language: JavaScript (javascript)
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();
}
}
Code language: JavaScript (javascript)
출력할 데이터가 많으면 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();
}
}
Code language: JavaScript (javascript)
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());
Code language: JavaScript (javascript)
BufferedWriter랑 크게 차이가 없음.
Java의 String은 immutable한 객체이기 때문에 수정하면 성능이 저하된다.
이에 문자열을 빈번하게 수정하는 경우 StringBuilder를 활용한다.
(Single thread에선 StringBuilder, multi thread에선 StringBuffer 사용하자)
