[java] Scanner, BufferedReader, StringTokenizer

Scanner VS BufferedReader

Scanner를 통한 입력

1
2
3
4
Scanner sc = new Scanner(System.in);

String str = sc.nextLine(); // 1 2 3 4 5 6 7 8 9 10
String[] result = str.split(" ");

BufferedReader를 통한 입력

1
2
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] result = br.readLine().split(" ");

문자열에 최적화 된 BufferedReader에 비해 Scanner는 다양한 기능을 지원하므로 속도가 조금 더 느리다.

split VS StringTokenizer

split

1
2
3
4
5
6
7
8
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] result = br.readLine().split(" ");

// A B C D 입력
result[0]; // A
result[1]; // B
result[3]; // C
result[4]; // D

StringTokenizer

1
2
3
4
5
6
7
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());

st.nextToken(); // A
st.nextToken(); // B
st.nextToken(); // C
st.nextToken(); // D

문자열을 잘라 쓰는건 똑같은 맥락이나, split은 정규식을 기반으로 자르는 로직이므로 내부가 복잡하다.
그에 반면 StringTokenizer의 경우 단순히 공백을 땡기는 것이므로
정규식 처리가 딱히 필요한게 아닌 경우 StringTokenizer가 효율적이다.