/ JAVAJUNGSUK

Ch9-19~20. StringBuffer

자바의 정석 기초편

0. 목차



Chapter9. java.lang 패키지와 유용한 클래스

Ch9 - 19. StringBuffer의 생성자와 메서드

Ch9 - 20. StringBuffer의 생성자와 메서드 예제



Ch9 - 19. StringBuffer의 생성자와 메서드


▶ StringBuffer()

▷ 16문자를 담을 수 있는 버퍼를 가진 StringBuffer 인스턴스 생성
StringBuffer sb = new StringBuffer();

// console
""
sb : [][][][][][][][][][][][][][][][] // char[16]


▶ StringBuffer(int length)

▷ 지정 된 개수의 문자를 담을 수 있는 버퍼를 가진 StringBuffer 인스턴스 생성
StringBuffer sb = new StringBuffer(10);

// console
""
sb : [][][][][][][][][][] // char[10]


▶ StringBuffer(String str)

▷ 지정 된 문자열 값(str)을 갖는 StringBuffer 인스턴스 생성
StringBuffer sb = new StringBuffer("Hi");

// console
Hi
sb : [H][i][][][][][][][][][][][][][][][][] // char[2 + 16]


▶ StringBuffer append(boolean b)

▶ StringBuffer append(char ch)

▶ StringBuffer append(char[] str)

▶ StringBuffer append(double d)

▶ StringBuffer append(float f)

▶ StringBuffer append(int i)

▶ StringBuffer append(long l)

▶ StringBuffer append(Object obj)

▶ StringBuffer append(String str)

▷ 반환 타입 : StringBuffer → 자기 자신을 반환
▷ 매개변수로 입력 된 값을 문자열로 변환
▷ StringBuffer 인스턴스가 저장하고 있는 문자열의 뒤에 덧붙임
StringBuffer sb1 = new StringBuffer("AAA");
StringBuffer sb2 = sb1.append(true);
sb1.append('d').append(10.0f);

StringBuffer sb3 = sb1.append("BBB").append(123);

// console
AAAtrued10.0BBB123 // sb1
AAAtrued10.0BBB123 // sb2
AAAtrued10.0BBB123 // sb3
sb1 : [A][A][A][][][][][][][][][][][][][][][][]
sb1,sb2 : [A][A][A][t][r][u][e][][][][][][][][][][][][]
sb1,sb2 : [A][A][A][t][r][u][e][d][][][][][][][][][][][]
sb1,sb2 : [A][A][A][t][r][u][e][d][1][0][.][0][][][][][][][]
sb1,sb2,sb3 : [A][A][A][t][r][u][e][d][1][0][.][0][B][B][B][][][][]
sb1,sb2,sb3 : [A][A][A][t][r][u][e][d][1][0][.][0][B][B][B][1][2][3][]


▶ int capacity()

▷ StringBuffer 인스턴스의 버퍼 크기(char[] 개수)를 반환
StringBuffer sb = new StringBuffer(100);
sb.append("AAAAA");

int bufferSize = sb.capacity();

// console
100
sb : [A][A][A][A][A][][][][][][][][][][][][][][]...[][][][][] // [] 총 개수 : 100개


▶ int length()

▷ StringBuffer 인스턴스의 버퍼에 담긴 문자열의 길이를 반환
StringBuffer sb = new StringBuffer(100);
sb.append("AAAAA");

int bufferLength = sb.length();

// console
5
sb : [A][A][A][A][A][][][][][][][][][][][][][][]...[][][][][] // [A] 개수 : 5개


▶ char charAt(int index)

▷ 지정 된 위치(index)에 있는 문자를 반환
StringBuffer sb = new StringBuffer("ABC");
char ch = sb.charAt(2);

// console
C
sb : [A][B][C][][][][][][][][][][][][][][][][]


▶ StringBuffer delete(int begin, int end)

▷ 시작 위치(begin)에서 끝 위치(end) 사이에 있는 문자를 제거
▷ begin ≤ 범위 < end
StringBuffer sb1 = new StringBuffer("0123456");
StringBuffer sb2 = sb1.delete(3, 6); // 3 ≤ 범위 < 6, 3 ~ 5

// console
0126 // sb1
0126 // sb2
sb1 : [0][1][2][3][4][5][6][][][][][][][][][][][][]
sb1,sb2 : [0][1][2][][][][6][][][][][][][][][][][][] // delete(3, 6)
sb1,sb2 : [0][1][2][6][][][][][][][][][][][][][][][] // 삭제 된 자리는 앞 당겨 채워넣음


▶ StringBuffer deleteCharAt(int index)

▷ 지정 된 위치(index)의 문자만 제거
StringBuffer sb = new StringBuffer("0123456");
sb.deleteCharAt(3);

// console
012456
sb : [0][1][2][3][4][5][6][][][][][][][][][][][][]
sb : [0][1][2][][4][5][6][][][][][][][][][][][][] // deleteCharAt(3);
sb : [0][1][2][4][5][6][][][][][][][][][][][][][] // 삭제 된 자리는 앞 당겨 채워넣음


▶ StringBuffer insert(int pos, boolean b)

▶ StringBuffer insert(int pos, char ch)

▶ StringBuffer insert(int pos, char[] str)

▶ StringBuffer insert(int pos, double d)

▶ StringBuffer insert(int pos, float f)

▶ StringBuffer insert(int pos, int i)

▶ StringBuffer insert(int pos, long l)

▶ StringBuffer insert(int pos, Object obj)

▶ StringBuffer insert(int pos, String str)

▷ append()는 맨 끝에 추가하는 거라서 위치 지정 필요 없음
▷ insert()는 위치 지정 필요
▷ 반환 타입 : StringBuffer → 자기 자신을 반환
▷ 두 번째 매개변수로 받은 값을 문자열로 변환하여
▷ 지정 된 위치(pos)에 추가
▷ pos는 0부터 시작
StringBuffer sb = new StringBuffer("0123456");
sb.insert(4, '#');

// console
0123#456
sb : [0][1][2][3][4][5][6][][][][][][][][][][][][]
sb : [0][1][2][3][][4][5][6][][][][][][][][][][][] // insert(4, '#'), char[4] 방 뺌
sb : [0][1][2][3][#][4][5][6][][][][][][][][][][][] // insert(4, '#'), char[4] # 넣음


▶ StringBuffer replace(int begin, int end, String str)

▷ 시작 위치(begin)에서 끝 위치(end) 사이에 있는 문자들을
▷ 주어진 문자열(str)로 바꿈
▷ begin ≤ 범위 < end
StringBuffer sb = new StringBuffer("0123456");
sb.replace(3, 6, "AB"); // 3 ~ 5

// console
012AB6
sb : [0][1][2][3][4][5][6][][][][][][][][][][][][]
sb : [0][1][2][][][][6][][][][][][][][][][][][] // replace(3, 6, "AB"), char[3 ~ 5] 방 뺌
sb : [0][1][2][A][B][][6][][][][][][][][][][][][] // replace(3, 6, "AB"), char[3 ~ 5] AB 넣음
sb : [0][1][2][A][B][6][][][][][][][][][][][][][] // 삭제 된 자리는 앞 당겨 채워넣음


▶ StringBuffer reverse()

▷ StringBuffer 인스턴스에 저장되어 있는 문자열의 순서를 거꾸로 나열
StringBuffer sb = new StringBuffer("0123456");
sb.reverse();

// console
6543210
sb : [0][1][2][3][4][5][6][][][][][][][][][][][][]
sb : [6][1][2][3][4][5][0][][][][][][][][][][][][] // 끝 ↔ 끝
sb : [6][5][2][3][4][1][0][][][][][][][][][][][][] // 끝-1 ↔ 끝-1
sb : [6][5][4][3][2][1][0][][][][][][][][][][][][] // 끝-2 ↔ 끝-2, 홀수라서 짝이 없는 가운데 멤버는 가만 둠


▶ StringBuffer setCharAt(int index, char ch)

▷ 지정 된 위치(index)의 문자를 주어진 문자(ch)로 바꿈
StringBuffer sb = new StringBuffer("0123456");
sb.setCharAt(5, 'A');

// console
01234A6
sb : [0][1][2][3][4][5][6][][][][][][][][][][][][]
sb : [0][1][2][3][4][][6][][][][][][][][][][][][] // setCharAt(5, 'A'), char[5] 방 뺌
sb : [0][1][2][3][4][A][6][][][][][][][][][][][][] // setCharAt(5, 'A'), char[5] A 넣음


▶ void setLength(int newLength)

▷ 지정 된 길이(newLength)로 길이를 변경
▷ 길이를 늘리는 경우에, 나머지 빈 공간을 char의 초기값 \u0000을 채움
StringBuffer sb1 = new StringBuffer("0123456");
sb1.setLength(5);

StringBuffer sb2 = new StringBuffer("0123456");
sb2.setLength(10);

String str = sb2.toString().trim();

// console
sb1 : 01234
sb2 : 0123456
str : 0123456
sb1 : [0][1][2][3][4][5][6][][][][][][][][][][][][]
sb1 : [0][1][2][3][4][][][][][][][][][][][][][][] // setLength(5), char[5] 까지만 문자열 살림

sb2 : [0][1][2][3][4][5][6][][][][][][][][][][][][]
sb2 : [0][1][2][3][4][5][6][\u0000][\u0000][\u0000][][][][][][][][][] // setLength(10), char[10] 까지 초기값 \u0000 채움

sb2,str : [0][1][2][3][4][5][6][\u0000][\u0000][\u0000][][][][][][][][][]
str : [0][1][2][3][4][5][6][][][][][][][][][][][][] // sb2.toString().trim(), trim()으로 양 끝의 \u0000 잘라내기


▶ String toString()

▷ StringBuffer 인스턴스의 문자열을 String으로 반환
▷ StringBuffer → String
StringBuffer sb = new StringBuffer("0123456");
String str = sb.toString();

// console
"0123456"


▶ String substring(int begin)

▶ String substring(int begin, int end)

▷ 반환 타입 : String → 일부를 뽑아서 StringBuffer를 String으로 반환
▷ int end 생략 시, begin ~ 끝
▷ int end 작성 시, begin ≤ 범위 < end
▷ 지정 된 범위 내의 문자열을 String으로 뽑아서 반환
StringBuffer sb = new StringBuffer("0123456");
String str1 = sb.substring(3); // 3 ~ 끝
String str2 = sb.substring(3, 5); // 3 ~ 4

// console
str1 : 3456
str2 : 34
sb : [0][1][2][3][4][5][6][][][][][][][][][][][][]

str1 : [][][][3][4][5][6][][][][][][][][][][][][] // substring(3), char[3 ~ 끝]만 남기고 다 없애기
str1 : [3][4][5][6][][][][][][][][][][][][][][][] // 삭제 된 자리는 앞 당겨 채워넣음

str2 : [][][][3][4][][][][][][][][][][][][][][] // substring(3, 5), char[3 ~ 4]만 남기고 다 없애기
str2 : [3][4][][][][][][][][][][][][][][][][][] // 삭제 된 자리는 앞 당겨 채워넣음



Ch9 - 20. StringBuffer의 생성자와 메서드 예제


▶ append()

public static void main(String[] args) {
    StringBuffer sb = new StringBuffer("01");
    StringBuffer sb2 = sb.append(23);
    sb.append('4').append(56);
    
    StringBuffer sb3 = sb.append(78);			
    sb3.append(9.0);

// console
sb = 0123456789.0
sb2 = 0123456789.0
sb3 = 0123456789.0
sb : [0][1][][][][][][][][][][][][][][][][]
sb,sb2 : [0][1][2][3][][][][][][][][][][][][][][]
sb,sb2 : [0][1][2][3][4][5][6][][][][][][][][][][][]
sb,sb2,sb3 : [0][1][2][3][4][5][6][7][8][][][][][][][][][]
sb,sb2,sb3 : [0][1][2][3][4][5][6][7][8][9][.][0][][][][][][]

▶ deleteCharAt(),delete(),insert(),replace()

    System.out.println("sb = "+sb);
    System.out.println("sb2 = "+sb2);
    System.out.println("sb3 = "+sb3);
    
    System.out.println("sb = "+sb.deleteCharAt(10));
    System.out.println("sb = "+sb.delete(3,6));
    System.out.println("sb = "+sb.insert(3,"abc"));
    System.out.println("sb = "+sb.replace(6, sb.length(), "END"));
    
// console
sb = 01234567890
sb = 01267890
sb = 012abc67890
sb = 012abcEND
sb : [0][1][2][3][4][5][6][7][8][9][.][0][][][][][][]
sb : [0][1][2][3][4][5][6][7][8][9][][0][][][][][][] // deleteCharAt(10)
sb : [0][1][2][3][4][5][6][7][8][9][0][][][][][][][]

sb : [0][1][2][3][4][5][6][7][8][9][0][][][][][][][]
sb : [0][1][2][][][][6][7][8][9][0][][][][][][][] // delete(3,6)
sb : [0][1][2][6][7][8][9][0][][][][][][][][][][] 

sb : [0][1][2][][6][7][8][9][0][][][][][][][][][]
sb : [0][1][2][a][b][c][6][7][8][9][0][][][][][][][] // insert(3,"abc")

sb : [0][1][2][a][b][c][6][7][8][9][0][][][][][][][]
sb : [0][1][2][a][b][c][][][][][][][][][][][][] // replace(6, sb.length())
sb : [0][1][2][a][b][c][E][N][D][][][][][][][][][] // replace(6, sb.length(), "END")

▶ capacity(), length()

    System.out.println("capacity = "+sb.capacity());
    System.out.println("length = "+sb.length());
}

// console
capacity = 18
length = 9
sb : [0][1][2][a][b][c][E][N][D][][][][][][][][][] // 처음 StringBuffer("01"), char[2 + 16]
sb : [0][1][2][a][b][c][E][N][D][][][][][][][][][] // 012abcEND 총 9개