ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java 입출력, BufferedReader, StringTokenizer
    JAVA 2020. 4. 8. 17:13
    반응형

    자바의 입력 Class

    • Scanner, BufferedReader, StringTokenizer
    • BufferedReader, StringTokenizer 는 문자열로 활용하기 위하여 사용. BufferedReader를 사용하는 것이 Scanner를 사용하는 것보다 빠르다.
    • BufferedReader는 문자열에 최적화 되어 있음.

    • Scanner를 사용했을시 입력 형태.

    //Scanner를 사용했을시 입력 형태. Scanner sc = new Scanner(System.in); int n = sc.nextInt(); // int long l = sc.nextLong(); // int String s = sc.next(); // String String s = sc.nextLine(); // String

    BufferedReader를 사용할때

    • 아래와 같이 한줄로 입력시, sc.nextInt()를 12번 호출하는건 비효율적이다. 입력갯수가 큰 알고리즘 문제의 경우 시간제한에 걸리게 된다.

    1 2 3 4 5 6 7 8 9 10 11 12 // 한줄 입력 for(int i=0;i<12;i++) { sc.nextInt(); }

    • 그래서 아래와 같이 사용한다.
    • 문자열로 받고 split메소드를 이용해서 공백을 기준으로 잘라서 활용.
    • integer.parseInt() 형변환을 통해 사용.

    1 2 3 4 5 6 7 8 9 10 11 12 // 한줄 입력 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String[] s = br.readLine().split(" "); // s[0] = "1"; Integer.parseInt(s[0]) => 1 // s[1] = "2"; // s[2] = "3"; // .....

    StringTokenizer 사용목적

    • BufferedReader는 잘라서 배열과 같이 인덱스를 사용하여 접근하여 사용.
    • StringTokenizer는 공백이 있다면 뒤에 문자열이 공백 자리를 땡겨 채우도록 한다.
    • StringTokenizer가 BufferedReader보다 빠르게 사용될 수 있다.
    • 문자열을 자르게 위해 split을 사용할땐, split은 정규식을 기반으로 자르는 로직으로서 내부는 복잡하다. 그에 비해 StringTokenizer의 nextToken()메소드는 단순히 공백 자리를 땡겨 채우는 것이다. 그렇기 때문에 속도 차이가 날 수 밖에 없다.
    • 정규식이나 인덱스 접근과 같은 처리가 필요없다면 StringTokenizer를 사용하는 것이 효율적이다.

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in); StringTokenizer st = new StringTokenizer(br.readLine()); // AB CDD EFFF GH 입력 st.nextToken() // AB st.nextToken() // CDD st.nextToken() // EFFF st.nextToken() // GH

    StringTokenizer 사용법

    • 자바에서는 String을 token단위로 끊어주는 StringTokenizer 클래스를 제공한다.
    • 예를들어 “this is my string” 이라는 스트링을 this, is, my, string 4개의 스트링으로 끊어주는 기능을 제공한다.
    • 그리고 공백말고도 다른 구획문자(delimiter)를 사용할수도 있다. 예를들어 this%is%my%string을 delimiter에 %를 넣어 StringTokenizer를 사용하면 마찬가지로 this, is, my, string으로 읽어준다.
    • thismy%string^일때 구획문자를 “$%^”라고 설정해주면 this, is, my, string 으로 끊어준다.

    String str = "this%%is%%my%%string"; StringTokenizer st = new StringTokenizer(str,"%%"); while(st.hasMoreTokens()) { System.out.println(st.nextToken()); }

    같은 문제를 풀었을 때, Scanner와 BufferedReader를 사용했을 때의 처리속도차이

    • BufferedReader를 사용했을시, 92MS로 처리속도 단축.

    • 알고리즘 문제를 풀때, 입력이 몇개인지 주어지지 않는 경우 입력을 EOF(End Of File)까지 처리한다. eof를 사용함으로서 데이터가 없음을 알려줄 수 있다.
    • java에서는 while(sc.hasNextInt())를 사용함으로서 EOF 까지 입력을 받을 수 있음.(입력이 끝날때까지)
    • ^ : 뺀다는것
    • java readline, nextLine(한줄바로 입력받음)
    반응형
Designed by Tistory.