Java 입출력(StringBuffer, Scanner)

Ena JJJ·2022년 11월 2일
0

java

목록 보기
3/7

1. Scanner

		import java.util.Scanner;
        
        Scanner s = new Scanner(System.in);

        String name;
        System.out.println("당신은 누구십니까?");
        name = s.next();

        System.out.println("나는"+name+"이다\n");
        s.close(); # s 객체를 해제해주는 작업

2. BufferReader

사용시
(1) import java.io.IOException
(2) public static void main(String[] args) throws IOException{}

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

public class Main {
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int a = Integer.parseInt(st.nextToken());
        int b = Integer.parseInt(st.nextToken());
        int c = Integer.parseInt(st.nextToken());

        System.out.println(a + b + c);
        br.close()
        

    }
}

BufferedReader의 경우 close() 메소드를 명시해주지 않아도 Garbage Collector에 의해 BufferedReader 및 내부의 객체들이 자동으로 정리된다. 하지만 Garbage Collector에 의해 사용되지 않는 자원이 정리되기 전에 연속/반복적으로 BufferedReader가 close 되지않고 사용되면 정상적으로 reading이 되지 않는 문제가 발생한다.

3. BufferedWriter

import java.io.IOException;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;

public class Main {
    public static void main(String[] args) throws IOException {
    
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));   //할당된 버퍼에 값 넣어주기
        String s = "Hello World!";   //출력할 문자열
        bw.write(s+"\n");   //버퍼에 있는 값 전부 출력
        bw.flush();   //남아있는 데이터를 모두 출력시킴
        bw.close();   //스트림을 닫음
    }
}

입력은 readLine(); 메서드를 이용한다. 이 때 주의해야 할 점이 2가지 있다.

  1. readLine()시 리턴값이 String으로 고정되기에 String이 아닌 다른 타입으로 입력을 받으려면 형변환을 꼭 해주어야 한다.

  2. 예외처리를 반드시 해줘야한다. readLine()을 할 때마다 try&catch를 활용하여 예외처리를 해주어도 되지만 보통 throwsIOException을 통하여 작업을 수행한다.

4. StringTokenizer 클래스

BufferedReader 클래스의 메서드로 입력을 읽어들이면, 라인 단위로 밖에 입력을 받아 들여야 한다. 이에 문자열을 분리하거나, 특정 문자에 따라 문자열을 구분하고 싶을 때, StringTokenizer를 이용할 수 있다.
토큰은 분리된 문자열 조각으로, StringTokenizer 클래스는 하나의 문자열을 여러 개의 토큰으로 분리하는 클래스이다.

StringTokenizer 메서드

5. StringTokenizer 와 Split 차이

  • StringTokenizer 는 java.util에 포함되어 있는 클래스로, split는 String 클래스에 속해있는 메서드 이다.
  • StringTokenizer는 문자 또는 문자열을 구분한다면, split는 정규표현식으로 구분한다.
  • StringTokenizer는 빈 문자열을 토큰으로 인식하지 않지만 split는 빈 문자열을 토큰으로 인식하는 차이가 있다.
  • StringTokenizer는 결과값이 문자열이라면 split는 결과 값이 문자열 배열이다. 따라서 StringTokenizer를 이용할 경우, 전체 토큰을 보고 싶다면 반복문을 이용해 하나씩 뽑아야한다.
  • 배열에 담아 반환하는 split은 데이터를 바로바로 잘라서 반환해주는 StringTokenizer 보다 성능이 조금 떨어지지만, 데이터 양이 많은 경우 크게 신경쓸 필요가 없다

0개의 댓글