ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java]자바 입출력(스캐너(Scanner), BufferedReader)
    Android/Java 2023. 3. 19. 15:19
    반응형

    [모든 포스팅은 개인적 공부를 위해 작성된 글입니다]

    - 자바 입출력 방법에는 대표적으로 Scanner와 BufferedReader가 있음

     

    <1. Scanner>

    public class Main {
    	public static void main(String[] args) {
    		Scanner sc =new Scanner(System.in);
    		
    		int A = sc.nextInt();
    		int B = sc.nextInt();
    		
    		System.out.print(A+B);
    		
    		sc.close();//한 번 close 후에는 다시 Scanner 사용 불가
    	}//main
    }

    - 입출력 시 리소스를 많이 사용하여 성능 부하를 초래하므로 BufferedReader에 비해 매우 느림

    - close() 하지 않아도 GC에 의해 자동으로 메모리 정리되지만, GC 실행 전까지는 메모리 유지되기 때문에 최적화 관점에서는 close() 해주는 것이 좋음

     

    <2. BufferedReader>

    (예제 백준 1000번)

    public class Main {
    	public static void main(String[] args) throws IOException {
    		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    		
    		String str = br.readLine();
    		
    		StringTokenizer st = new StringTokenizer(str, " ");
    		
    		int A = Integer.parseInt(st.nextToken());//BuffferedReader는 String으로 입력받기 때문에 Integer로 전환
    		int B = Integer.parseInt(st.nextToken());
    		
    		System.out.print(A+B);
    		
    		br.close();
    	}//main
    }

    - 데이터를 하나씩 입력하는 것이 아니라 한번에 입력하므로 속도 빠름(필자는 Scanner보다 BufferedReader 선호)
    - 입출력이나 데이터 많은 경우 지향하는 방식
    - BufferedWriter나 BufferedReader는 String의 형태로만 입출력 가능
    - IOException 예외처리 반드시 해줘야 함(throws IOException)
    - StringTokenizer : 특정 문자를 기준으로 문자열을 분리하는 클래스
      - StringTokenizer st = new StringTokenizer(문자열); -> 띄어쓰기를 기준으로 문자열 분리
      - StringTokenizer st = new StringTokenizer(문자열, 구분자); -> 구분자(특정 문자)를 기준으로 문자열 분리
      - StringTokenizer st = new StringTokenizer(문자열, 구분자, true/false);
        -> 구분자를 기준으로 문자열 분리
            -> 구분자도 토큰으로 넣을지(true), 분리된 문자열 토큰에 포함 안 시킬지(false/디폴트)
      - 분리된 문자열은 nextToken()으로 확인 가능
    - split과 StringTokenizer의 차이
      - split은 나눈 문자열을 배열 형태로 반환하고 StringTokenizer는 문자열 형태로 반환
      - String[] mobNum = str.split("-"); String ret1 = mobNum[0]; String ret2 = mobNum[1];
      - String str = "010-12-34-56-78";인 경우
        String[] arr = str.split("-");로 하는 경우 arr[0]~arr[4]까지 생성
        String[] arr = str.split("-", 2);로 하는 경우 여기서 2는 생성되는 배열의 크기를 2까지로 한정시키겠다는 의미로
                         arr[0] = 010, arr[1] = 12-34-56-78이 됨
        String[] arr = str.split("-", 4)로 하는 경우 arr[0] = 010, arr[1] = 12, arr[2] = 34, arr[3] = 56-78이 됨
      - 공백도 arr에 포함되므로 공백 제외하고 카운트 하고 싶은 경우 arr[i].equals("")이면 continue하게 처리해줘야 함!!

    반응형

    댓글

Designed by Tistory.