Java 입출력, BufferedReader, StringTokenizer
06 Apr 2018 | Java BufferedReader StringTokenizer자바의 입력 Class
- Scanner, BufferedReader, StringTokenizer
- BufferedReader, StringTokenizer 는 문자열로 활용하기 위하여 사용. BufferedReader를 사용하는 것이 Scanner를 사용하는 것보다 빠르다.
-
BufferedReader는 문자열에 최적화 되어 있음.
- Scanner를 사용했을시 입력 형태.
BufferedReader를 사용할때
- 아래와 같이 한줄로 입력시, sc.nextInt()를 12번 호출하는건 비효율적이다. 입력갯수가 큰 알고리즘 문제의 경우 시간제한에 걸리게 된다.
- 그래서 아래와 같이 사용한다.
- 문자열로 받고 split메소드를 이용해서 공백을 기준으로 잘라서 활용.
- integer.parseInt() 형변환을 통해 사용.
StringTokenizer 사용목적
- BufferedReader는 잘라서 배열과 같이 인덱스를 사용하여 접근하여 사용.
- StringTokenizer는 공백이 있다면 뒤에 문자열이 공백 자리를 땡겨 채우도록 한다.
- StringTokenizer가 BufferedReader보다 빠르게 사용될 수 있다.
- 문자열을 자르게 위해 split을 사용할땐, split은 정규식을 기반으로 자르는 로직으로서 내부는 복잡하다. 그에 비해 StringTokenizer의 nextToken()메소드는 단순히 공백 자리를 땡겨 채우는 것이다. 그렇기 때문에 속도 차이가 날 수 밖에 없다.
- 정규식이나 인덱스 접근과 같은 처리가 필요없다면 StringTokenizer를 사용하는 것이 효율적이다.
StringTokenizer 사용법
- 자바에서는 String을 token단위로 끊어주는 StringTokenizer 클래스를 제공한다.
- 예를들어 “this is my string” 이라는 스트링을 this, is, my, string 4개의 스트링으로 끊어주는 기능을 제공한다.
- 그리고 공백말고도 다른 구획문자(delimiter)를 사용할수도 있다. 예를들어 this%is%my%string을 delimiter에 %를 넣어 StringTokenizer를 사용하면 마찬가지로 this, is, my, string으로 읽어준다.
- this$%^is$my%string^일때 구획문자를 “$%^”라고 설정해주면 this, is, my, string 으로 끊어준다.
같은 문제를 풀었을 때, Scanner와 BufferedReader를 사용했을 때의 처리속도차이
-
BufferedReader를 사용했을시, 92MS로 처리속도 단축.
- 알고리즘 문제를 풀때, 입력이 몇개인지 주어지지 않는 경우 입력을 EOF(End Of File)까지 처리한다. eof를 사용함으로서 데이터가 없음을 알려줄 수 있다.
- java에서는
while(sc.hasNextInt())
를 사용함으로서 EOF 까지 입력을 받을 수 있음.(입력이 끝날때까지) - ^ : 뺀다는것
- java
readline, nextLine(한줄바로 입력받음)
Comments