표준 입출력
System.out
System.err
java.util.Scanner
Scanner(File source)
Scanner(InputStream source)
Scanner(String source)
파일, 입력 스트림과 같은 다양한 입력 소스에서 데이터를 읽어 구분자로 토큰화하고 다양한 타입으로 변환하여 값을 리턴해주는 역할의 클래스
Scanner sc = new Scanner(System.in); String line = sc.nextLine(); //개행(Enter) 문자를 만나면 개행 문자까지 포함해서 읽어서 처리 String next = sc.next(); // White space 문자를 만나면 White space를 포함하지 않고 처리 // 앞에 읽은 White space는 빼버림 int n = sc.nextInt(); // White space 문자를 만나면 White space를 포함하지 않고 처리 // 앞에 읽은 White space는 빼버림
next()와 nextLine()를 같이 쓸 때 개행 문자 포함 여부를 주의해야 한다
//n //k1 1 2 3 ... k1 //k2 1 2 3 ... k2 //... //kn 1 2 3 ... kn Scanner sc = new Scanner(System.in); int n = sc.nextInt(); for (int i = 0; i < n; ++i) { int k = sc.nextInt(); for (int j = 0; j < k; ++j) { int data = sc.nextInt(); System.out.println(data); } }
장점
손쉽게 입력처리 가능
데이터 형변환으로 인한 편리함
단점
- 하나씩 읽기 때문에 대량의 데이터 처리 시 수행시간이 비효율적임
-
필터 스트림 유형
readLine(): 줄단위 문자열 처리 기능 제공
줄단위로 읽기 때문에 대량의 데이터 처리 시 수행시간이 효율적임
//n //k1 1 2 3 ... k1 //k2 1 2 3 ... k2 //... //kn 1 2 3 ... kn BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); for (int i = 0; i < n; ++i) { String str = br.readLine(); String[] dataArr = str.split(" "); int k = Integer.parseInt(dataArr[0]); for (int j = 1; j <= k; ++j) { int data = Integer.parseInt(dataArr[j]); System.out.println(data); } }
java.util.StringTokenizer vs String.split()
split()은 정규식을 사용하는데, StringTokenizer는 주어진 하나의 구분자만 사용하기 때문에 속도 측면에서 성능이 더 좋다
구분자를 생략하면 공백이 기본 구분자가 된다
split()은 구분자를 다양하게 줄 수 있어 가변요소가 많을 때는 split()이 유용하다
//n //k1 1 2 3 ... k1 //k2 1 2 3 ... k2 //... //kn 1 2 3 ... kn BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); for (int i = 0; i < n; ++i) { StringTokenizer st = new StringTokenizer(br.readLine()); int k = Integer.parseInt(st.nextToken()); for (int j = 0; j < k; ++j) { int data = Integer.parseInt(st.nextToken()); System.out.println(data); } }
java.lang.StringBuilder
문자열의 조작을 지원하는 클래스
append()로 모아서 한 번에 toString()하기 때문에 자바에서 상수로 취급되는 무자열을 조작 시마다 새로운 문자열이 생성되는 것을 방지해서 메모리 효율과 속도가 향상됨