일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Tree
- Matrix
- Number Theory
- geometry
- 파이썬
- Math
- sorting
- Counting
- Binary Search
- Binary Tree
- Class
- database
- 코딩테스트
- Data Structure
- dynamic programming
- SQL
- array
- greedy
- java
- two pointers
- simulation
- 코테
- implement
- 자바
- string
- Stack
- Method
- bit manipulation
- hash table
- 구현
- Today
- Total
코린이의 소소한 공부노트
StringBuffer 클래스 본문
[StringBuffer 클래스]
1. String 클래스처럼 문자열을 저장하고 다루기 위한 클래스이다.
2. String 클래스와 마찬가지로 내부적으로 char[]를 갖고 있다.
3. String은 내용을 변경할 수 없지만(immutable), StringBuffer는 내용을 변경할 수 있다(mutable).
4. 배열은 길이를 변경할 수 없다. 그러므로 StringBuffer를 생성할 때 저장할 문자열의 길이를 고려해서 적절한 크기로 생성해줘야 한다. -> [생성자]에서 확인 가능
[생성자]
public StringBuffer(){
this(16);
}
StringBuffer sb = new StringBuffer(); // sb = ""
StringBuffer()
- 16 문자를 담을 수 있는 버퍼를 가진 StringBuffer 인스턴스 생성
public StringBuffer(int length){ // 적절한 길이를 선택해 지정해줄 수 있음
value = new char[length];
shared = false;
}
StringBuffer sb = new StringBuffer(10); // sb = ""
StringBuffer(int length)
- 지정된 개수의 문자를 담을 수 있는 버퍼를 가진 StringBuffer 인스턴스 생성
public StringBuffer(String str){
this(str.length() + 16);
append(str);
}
StringBuffer sb = new StringBuffer("Hi"); // sb = "Hi"
StringBuffer(String str)
- 지정된 문자열(str)을 갖는 StringBuffer 인스턴스 생성
- 이때 버퍼의 길이는 str의 길이 + 16
[메서드]
StringBuffer sb1 = new StringBuffer("123"); // sb1 = "123"
StringBuffer sb2 = sb1.append(true); // sb1 = "123true", sb2 = "123true"
sb1.append('A').append(10.0f); // sb1 = "123trueA10.0", sb2 = "123trueA10.0"
StringBuffer append(types x)
- types: boolean, char, char[], int, long, float, double, Object, String
- x의 값을 문자열로 변환 후 StringBuffer 인스턴스가 저장하고 있는 문자열 뒤에 덧붙이고, 자기 자신을 반환함
- sb1과 sb2는 같은 객체를 가리킴
- StringBuffer를 반환하는 것이기 때문에, 3번째 코드처럼 쓸 수도 있음 -> 메서드 체이닝(chaining)
- 참조변수의 경우 toString()을 호출한 결과를 문자열로 반환 후 덧붙임
StringBuffer sb = new StringBuffer(100);
sb.append("abcd");
int bSize = sb.capacity(); // bSize = 100
int sSize = sb.length(); // sSize = 4
int capacity() // int length()
- capacity 메서드는 StringBuffer 인스턴스의 버퍼 크기를 알려줌
- length 메서드는 버퍼에 담긴 문자열의 길이를 알려줌
StringBuffer sb = new StringBuffer("abc");
char c = sb.charAt(2); // c = 'c'
char charAt(int index)
- 지정된 위치(index)에 있는 문자를 반환
StringBuffer sb = new StringBuffer("01234567");
sb.delete(3, 6); // sb = "01267"
StringBuffer delete(int start, int end)
- 시작 위치(start) 이상 끝 위치(end) 미만의 문자 제거 후 자신을 반환
- 제거된 후 남은 빈 공간은 뒤에 있는 문자열들이 자리를 옮겨 채워줌
StringBuffer sb = new StringBuffer("01234567");
sb.deleteCharAt(3); // sb = "0124567"
StringBuffer deleteCharAt(int index)
- 지정된 위치(index)에 있는 문자를 제거 후 자신을 반환
- 제거된 후 남은 빈 공간은 뒤에 있는 문자열들이 자리를 옮겨 채워줌
StringBuffer sb = new StringBuffer("01234567");
sb.insert(4,'.'); // sb = "0123.4567"
StringBuffer insert(int pos, types x)
- types: boolean, char, char[], int, long, float, double, Object, String
- x의 값을 문자열로 변환 후 지정된 위치(pos)에 추가한 후, 자기 자신을 반환
- 참조변수의 경우 toString()을 호출한 결과를 문자열로 반환 후 추가
StringBuffer sb = new StringBuffer("01234567");
sb.replace(3,6,"A"); // sb = "012A67"
StringBuffer replace(int start, int end, String str)
- 시작 위치(start) 이상 끝 위치(end) 미만의 문자를 주어진 문자열(str)로 바꾼 후, 자기 자신을 반환
StringBuffer sb = new StringBuffer("01234567");
sb.reverse(); // sb = "76543210"
StringBuffer reverse()
- StringBuffer 인스턴스에 저장되어 있는 문자열의 순서를 뒤집어준 후, 자기 자신을 반환
- 문자열의 길이가 n이라고 하면, 0번째와 n-1번째가 자리를 바꾸고, 1번째와 n-2번째가 자리는 바꾸는 형식으로 뒤집힘
StringBuffer sb = new StringBuffer("01234567");
sb.setCharAt(5, 'a'); // sb = "01234a67"
void setCharAt(int index, char ch)
- 지정된 위치(index)의 문자를 주어진 문자(ch)로 바꿈
StringBuffer sb = new StringBuffer("01234567");
// sb = "01234567"
sb.setLength(5); // sb = "01234"
sb.setLength(10); // sb = "01234 "
void setLength(int newLength)
- 지정된 길이로 문자열의 길이를 변경
- 이때 크기를 늘리게 되어 빈 공간이 생기는 경우 빈 문자 '\u0000'으로 채움
StringBuffer sb = new StringBuffer("01234567");
String s = sb.toString(); // s = "01234567"
String toString()
- 버퍼의 문자열을 String으로 반환
StringBuffer sb = new StringBuffer("01234567");
String s1 = sb.substring(3); // s1 = "34567"
String s2 = sb.substring(2,6); // s2 = "2345"
String substring(int begin) // String substring(int begin, int end)
- 주어진 시작 위치(begin) 이상 끝 위치(end) 미만의 범위에 있는 문자열 String으로 뽑아서 반환
- end를 지정하지 않으면 문자열 길이로 자동 인식
[쿠키글] equals 메서드를 이용할 때 String 클래스와의 차이점
StringBuffer는 equals 메서드가 오버라이딩 되어있지 않기 때문에 내용이 아닌 주소를 비교한다.
내용을 비교하고 싶으면 String으로 변환 후 비교해야 한다.
StringBuffer sb1 = new StringBuffer("abc");
StringBuffer sb2 = new StringBuffer("abc");
System.out.println(sb1==sb2); // false
System.out.println(sb1.equals(sb2)); // false
String s1 = sb1.toString();
String s2 = sb2.toString();
System.out.println(s1==s2); // false
System.out.println(s1.equals(s2)); // true
'Java' 카테고리의 다른 글
StringBuilder 클래스 (0) | 2022.08.24 |
---|---|
Math 클래스 (0) | 2022.08.24 |
문자열의 결합과 변환 (0) | 2022.08.18 |
String 클래스 (0) | 2022.08.16 |
Object 클래스와 메서드 (0) | 2022.06.16 |