StringBuilder
기존에 String 클래스의 인스턴스는
여러 개의 문자열을 더할 때 매번 새로운 인스턴스를 생성해야하는 불편함이 있는데
StringBuilder가 이를 효율적으로 사용할 수 있게 해준다.
ex)
public class Main {
public static void main(String[] args) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("문자열 ").append("연결");
String str = stringBuilder.toString();
System.out.println(stringBuilder);
System.out.println(str);
}
}
다음과 같은 예제가 있을때
stringBuilder의 객체가 생성된후. append()의 인자로 연결하고자하는 문자열을 넣어서 StringBuilder의 객체를 통해 호출된다. =>
System.out.println(stringBuilder);
결과 값으로는 => 문자열 연결 // 이 출력되게 된다.
또한 문자열을 출력하거나 변수에 문자열을 할당할 때에는 toString()매서드를 통해
String str = stringBuilder.toString();
System.out.println(str);
결과값이 => 문자열 연결 //로 같이 출력되게 된다.
StringBuffer
String 클래스의 인스턴스는 한번 생성되면 읽기만하고 변경할 수 없게된다.
이러한 문제를 해결하기위해 StringBuffer 클래스를 사용하게된다.
StringBuffer은 인스턴스 값을 변경할 수도 있고, 추가할 수도있다.
클래스 내부에는 버퍼(buffer)라고 하는 독립적 공간을 가지는데 16개 문자를 저장하는 크기이며
인스턴스 생성시 언제나 16개의 문자를 더 저장할 수 있도록 여유있는 크기로 저장된다.
StringBuffer 클래스에서 자주 사용되는 매서드
append() / capacity() / delete() / insert()
ex)
append()
=> concat() 메서드와 같은 결과를 반환, 내부적인 처리 속도가 훨씬 빠르다.
StringBuffer str = new StringBuffer("Java");
System.out.println("문자열 : " + str);
System.out.println(str.append(" programming"));
System.out.println("append() 메서드 호출 후 문자열 : " + str);
와 같은 예제에서
첫 줄
str변수에 java가 할당되어 있으므로
첫번째 println은 => 문자열 : Java //가 출력된다.
두번째 줄
str에 있는 Java와 append매서드의 결과인 "연결"을 통해서
두번째 println은 => Java programming이 출력된다 * "pro~"앞에 뛰어쓰기가 있기 때문에 뛰어서 작성된다.
세번째 줄
결과로 str에 최종저장되는 값은 Java programming이기에
세번째 println은 => append() 메서드 호출 후 문자열 : Java programming 가 된다.
capacity()
=> StringBuffer 인스턴스의 현재 버퍼 크기 여유 버퍼크기 16개에 + 문자길이를 더해 출력
StringBuffer str01 = new StringBuffer();
StringBuffer str02 = new StringBuffer("Java");
System.out.println(str01.capacity());
System.out.println(str02.capacity());
str01의 buffer크기는 ()비어있기때문에
버퍼의 특징으로 인스턴스 생성 시 사용자가 설정한 크기보다 언제나 16개의 문자를 더 저장할 수 있도록 여유 있는 크기로 생성되니 16이 출력된다.
마찬가지로
str02는 4+16 이되니 20이 출력된다.
delete() 매서드
=> 인덱스가 시작인 위치의 문자부터 마지막 숫자-1 인 위치의 문자까지를 삭제하고 있다.
즉 아래 예제에 대입하면 4부터 시작해서 7인 위치의 문자까지 삭제하게 된다.
StringBuffer str = new StringBuffer("Java Oracle");
System.out.println("문자열 : " + str);
System.out.println(str.delete(4, 8));
System.out.println(str.deleteCharAt(1));
System.out.println("deleteCharAt() 메소드 호출 후 문자열 : " + str);
위 부분에서 delete 매서드만 빼서 보자.
System.out.println(str.delete(4, 8));
Java Oracle 문자열은 총 11위치까지 존재하게되는데
delete매서드는 4~7까지의 글자를 삭제하게 된다.
따라서 결과값은 Javacle이 출력되게 된다.
System.out.println(str.deleteCharAt(1));
deleteCharAt() 매서드는 사용하게되면 특정 위치의 한개문자만 삭제하게 된다. 따라서
이전 결과값으로 인해 str에 저장된 Javacle에서 1번째 위치인 a를 제거해
Jvacle이 된다.
따라서 deleteCharAt() 메소드 호출 후 문자열 : Jvacle가 최종 출력되게 된다.
insert() 매서드
=> 인수로 전달된 값을 문자열로 변환한 후 문자열에 지정된 인덱스 위치에 추가하게된다.
이때 전달된 인덱스가 문자열의 길이와 같으면 append() 메서드와 같이 연결한 결과를 반영하게 된다.
StringBuffer str = new StringBuffer("Java Programming!!");
System.out.println("문자열 : " + str);
System.out.println(str.insert(4, "Script"));
System.out.println("insert() 메서드 호출 후 문자열 : " + str);
inster t매서드만 따로 빼서 보도록하자.
System.out.println(str.insert(4, "Script"));
위의 예제에서 4번재 위치한 값은 "Java(이 공간이다.) programming!!"
저 공간에 삽입하면 JavaScript programming!!이 되게되고
JavaScript Programming!! 가 출력된다.
자바의
StringBuilder / StringBuffer 클래스의 결과값과
자주 사용되는 매서드의 활용을 알아봤다.
자주 사용되는 클래스들이니 꼭 숙지하도록 하자.
더 많은 StringBuffer 매서드의 활용을 알고싶다면
↓ 아래 링크를 참고해도 좋을것 같다.
https://docs.oracle.com/javase/7/docs/api/java/lang/StringBuffer.html
'JAVA' 카테고리의 다른 글
JSON 직렬화, 역직렬화 Convert Java Object to JSON (0) | 2023.01.13 |
---|---|
객체지향 프로그래밍 - 클래스(Class)와 객체(Object) // (개발자 기초용어) *알기쉽게 정리 (2) | 2022.12.27 |
StringBuffer 와 String 의 차이점? (0) | 2022.12.26 |
Java 문자열 뒤집기 StringBuilder.reverse() (Reverse Stirng ) (0) | 2022.12.26 |
StringTokenizer 클래스 정리 (0) | 2022.12.21 |
댓글