StringBuilder 와 BufferedReader

Hwani·2024년 5월 20일

Java 개념정리

목록 보기
3/5

최근 코딩테스트 문제를 풀면서 궁금한게 생겼다.
Scanner로만 입출력을 하다가 다른 풀이를 보면 StringBuilder, BufferedReader를 사용하는 사람이 되게 많았다.
그래서 정리하고자 글을 쓰게되었다.

String의 특징

String은 소위 불변(immutable) 객체이다. 한 번 생성된 String은 내용을 바꿀 수 없다.
그래서 String 객체와 String 객체를 더하면 새로운 문자열이 생성되고 이는 메모리 할당과 메모리 해제를 발생시켜 연산이 많아질수록 성능적으로 좋지않다.
그래서 나온 것이 StringBuilder이다.

StringBuilder란?

  • String과 문자열을 더할 때 새로운 객체를 생성하는 것이 아니라 기존의 데이터에 더하는 방식을 사용하기 때문에 속도도 빠르며 상대적으로 부하가 적다. 즉, 긴 문자열을 더하는 상황에서는 StringBuilder을 사용하면 좋다.

생성자

StringBuilder sb = new StringBuilder(); // 기본 생성자
StringBuilder sb = new StringBuilder(20); // int 타입의 20사이즈 생성자
StringBuilder sb = new StringBuilder("aaa"); // String 문자열을 인자로 하는 생성자

주요 메서드

public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();

        // 문자열 추가
        sb.append("Hello");
        System.out.println("sb.append(\" World!\") = " + sb.append(" World!")); // "Hello World! World!"

        // 문자열 길이
        int length = sb.length();
        System.out.println("sb.length() = " + length); // 19 

        // 문자열 삽입
        sb.insert(1, "&");
        System.out.println("sb.insert(1, \"&\") = " + sb); // "H&ello World! World!"

        // 문자열 교체
        sb.replace(6, 11, "THANK YOU");
        System.out.println("sb.replace(6, 11, \"THANK YOU\") = " + sb); // "H&ello THANK YOU World!"

        // 부분 문자열 추출 
        System.out.println("sb.substring(6) = " + sb.substring(6)); // "THANK YOU World!"

        // 부분 문자열 삭제
        sb.delete(1, 2); // '&'를 삭제
        System.out.println("sb.delete(1, 2) = " + sb); // "Hello THANK YOU World!"

        // 문자 변경
        sb.setCharAt(0, 'h');
        System.out.println("sb.setCharAt(0, 'h') = " + sb); // "hello THANK YOU World!"

        // 역순으로 변경
        sb.reverse();
        System.out.println("sb.reverse() = " + sb); // "!dlroW UOY KNAHT olleh"

        // 문자열을 다시 원래대로 돌리기 위해 다시 역순으로 변경
        sb.reverse();

        // StringBuilder를 String으로 변환
        String finalString = sb.toString();
        System.out.println("sb.toString() = " + finalString); // "hello THANK YOU World!"
    }

BufferedReader란?

InputStreamReader에 버퍼링 기능이 추가된 클래스

  • 입력 스트림에서 문자를 읽는 함수
  • 문자나 배열, 라인들을 효율적으로 읽기 위해 문자들을 버퍼에 저장하고 읽는 방법
  • 버퍼의 사이즈는 사용자가 지정할 수 있으며, 지정하지 않으면 default 사이즈가 적용된다.

Buffer란?

어떤 데이터가 전송될 때, 일시적으로 저장되는 메모리 영역이다.

  • 문자를 묶어서 한 번에 전달하므로 전송시간이 적게 걸려 성능이 향상된다.
  • 사용자가 문자를 잘못 입력했을 경우 수정할 수 있다.

BufferedReader는 Scanner와 유사하다.
Bufferedwriter는 System.out.print();과 유사하다.

BufferedReader 사용법

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

// 예외처리를 해주어야한다.
public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 선언
        String str = br.readLine(); // 입력된 내용
        System.out.println(str);
    }

BufferedWriter 사용법

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));   // 할당된 버퍼에 값 넣어주기
String s = "abcdefg";   // 출력할 문자열
bw.write(s+"\n");   // 버퍼에 있는 값 전부 출력
bw.flush();   // 남아있는 데이터를 모두 출력
bw.close();   // 스트림을 닫음

참고 : https://validming99.tistory.com/113
https://codesign.tistory.com/88

profile
개발자될거야

0개의 댓글