JAVA

JAVA : StringBuilder & Scanner

HBean_ 2021. 1. 8. 23:20

 

알고리즘 문제를 풀 때, 시간 초과로 인한 문제가 발생할 수 있다. 

이때, Scanner 대신 StringBuilder를 사용하면 소요 시간을 단축할 수 있다.

 

  • Scanner

    • java.util.Scanner 클래스
    • 읽은 데이터 파싱 가능
    • IOexception 던짐X
    • 버퍼 사이즈 

 

<사용 예시>

import java.util.Scanner;
public class Main {
 
	public static void main(String[] args){
        
	  Scanner sc = new Scanner(System.in);
    int N = sc.nextInt();
  
    System.out.println(N);
  }
}

 

  • StringBuilder

    • java.io.BufferedReader 클래스
    • 파싱 불가능 -> 모두 텍스트로 읽음 (string으로 값을 읽음), 별도의 처리 필요함
    • buffer를 이용하여 scanner 비해 속도 빠름 ( 파싱 기능 없이 단순히 읽기 때문)
    • IOexception 던짐O

 

<사용 예시>

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class Main {
 
	public static void main(String[] args) throws IOException{
        
	  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    int N = Integer.parseInt(br.readLine());
  
    System.out.println(N);
  }
}

 

 

 

<정리>

 

- Scanner : 키보드가 눌릴 때마다 데이터를 목적지에 이동

- StringBuffer : 버퍼에 값들을 모았다가 모인 데이터를 목적지로 이동

- Scanner가 사용하기는 더 편리하지만, 데이터 양이 많아질 경우 StringBuffer를 사용하는 것이 효율적으로 데이터를 전달할 수 있다.

 

 

StringTokenizer

 

- BufferedReader로 받은 data는 line 단위로 되어 있음 

- 공백 단위로 나누고 싶다면 별도의 처리 필요 -> StringTokenizer 사용

- 인자로 BufferedReader로 읽은 문자열 가지고 nextToken()으로 쪼개기

- 별도의 타입이 있을 경우 추가 처리 필요 (ex: Integer.parseInt();)

 

<사용 예시>

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
public class Main {
 
	public static void main(String[] args) throws IOException{
        
	  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String test = br.readLine();
  
    StringTokenizer st = new StringTokenizer(test); //StringTokenizer 인자값에 입력 문자열 넣음
    
    int first = Integer.parseInt(st.nextToken());  //첫번째 값은 int type
    String second = st.nextToken();                //두번째 값은 string 일때

    System.out.println(first);
    System.out.println(second);
  }
}