최근 코딩테스트 문제를 풀면서 궁금한게 생겼다.
Scanner로만 입출력을 하다가 다른 풀이를 보면 StringBuilder, BufferedReader를 사용하는 사람이 되게 많았다.
그래서 정리하고자 글을 쓰게되었다.
String은 소위 불변(immutable) 객체이다. 한 번 생성된 String은 내용을 바꿀 수 없다.
그래서 String 객체와 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!"
}
InputStreamReader에 버퍼링 기능이 추가된 클래스
어떤 데이터가 전송될 때, 일시적으로 저장되는 메모리 영역이다.
BufferedReader는 Scanner와 유사하다.
Bufferedwriter는 System.out.print();과 유사하다.
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 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