티스토리 뷰
StringBuilder
변경이 가능한 문자열을 나타내는 클래스
string 객체는 값이 변경되면 메모리에 새로운 참조 값을 생성하고 이전 참조 값을 버린다.
StringBuilder는 객체의 참조 값을 변경하지 않고 힙 메모리에서 값이 삽입, 추가, 제거될 수 있다.
즉, 문자열을 반복적으로 수정해야하는 경우
객체 생성
StringBuilder 클래스는 System.Text 네임스페이스의 객체이므로 using문에 다음과 같이 System.Text를 추가한다.
using System;
using System.Text;
StringBuilder 개체 인스턴스화
StringBuilder 객체 선언 및 초기화는 일반 객체와 동일하다. 다음은 StringBuilder 객체를 생성과 생성과 초기화를 함께 하는 예제입니다.
// StringBuilder 객체 생성
StringBuilder myStringBuilder = new StringBuilder();
// StringBuilder 객체 생성과 초기화
StringBuilder myStringBuilder2 = new StringBuilder("Init StringBuilder");
용량 및 길이 설정
StringBuilder는 문자 수를 확장할 수 있는 동적 개체이지만 최대 문자 수 값을 지정할 수도 있다. 이 값은 현재 보관된 문자열의 길이와는 다른 개념이다.
"Hello"라는 문자열을 사용하여도 개체 최대 용량을 25로 지정할 수 있는 것이다.
용량에 도달할 때까지 자체 크기를 다시 할당할 수 없다. 이 경우 새공간이 자동으로 할당되며 용량이 두배로 늘어난다.
즉, 크기가 10인 StringBuilder에 11개의 문자열을 넣으려하면 새로운 크기가 20인 StringBuilder를 생성한다는 소리다.
StringBuilder myStringBuilder = new StringBuilder("Hello World!", 25);
생성자 외에도 Capacity 속성에 접근하여 최대 크기를 변경할 수 있다.
myStringBuilder.Capacity = 25;
EnsureCapacity 메서드를 사용하여 현재 용량을 확인할 수 있다.
Console.WriteLine("Current Capacity : " + myStringBuilder.EnsureCapacity());
Length 속성으로 크기 값을 조절할 수도 있습니다.
Length를 변경하면 Capacity 속성도 동일 값으로 자동 변경된다.
문자열 수정
메서드 명칭 | 기능 |
StringBuilder.Append | 현재 StringBuilder의 끝에 정보를 추가한다. |
StringBuilder.AppendFormat | 문자열에 전달된 서식 지정자를 서식 있는 텍스트로 바꾼다. |
StringBuilder.Insert | 현재 StringBuilder의 지정된 인덱스에 문자열 또는 개체를 삽입한다. |
StringBuilder.Remove | 현재 StringBuilder에서 지정된 수의 문자를 제거한다. |
StringBuilder.Replace | 현재 StringBuilder에서 발견되는 지정된 문자 또는 문자열을 지정된 다른 문자 또는 문자열로 모두 바꾼다. |
문자열 변환
StringBuilder 개체의 문자열은 string 매개 변수를 가진 메서드에 전달하거나 개체 자체를 string 개체로 형변환해야 한다.
가장 흔하게는 StringBuilder.ToString() 메서드를 호출하여 문자열을 출력한다.
using System;
using System.Text;
public class Example
{
public static void Main()
{
StringBuilder sb = new StringBuilder();
bool flag = true;
string[] spellings = { "recieve", "receeve", "receive" };
sb.AppendFormat("Which of the following spellings is {0}:", flag);
sb.AppendLine();
for (int ctr = 0; ctr <= spellings.GetUpperBound(0); ctr++) {
sb.AppendFormat(" {0}. {1}", ctr, spellings[ctr]);
sb.AppendLine();
}
sb.AppendLine();
Console.WriteLine(sb.ToString());
}
}
// The example displays the following output:
// Which of the following spellings is True:
// 0. recieve
// 1. receeve
// 2. receive
참고자료
'Computer Language > C#' 카테고리의 다른 글
[C#] 다중조건문의 동작 순서 (0) | 2023.08.15 |
---|---|
[C#] 메모리 할당 (0) | 2023.08.15 |
[C#] 문자열 연결 방법 (+, Concat, Format, Interpolation, Join, StringBuilder) (0) | 2023.08.14 |
[C#] String.Remove 메서드 - 문자열 제거 (0) | 2023.08.14 |
[C#] String.Replace 메서드 - 문자열 수정 (0) | 2023.08.14 |
- Total
- Today
- Yesterday
- 컴파일
- 초기화
- 게임수학
- thread
- const
- 프로세스
- New
- 메모리
- c++
- static_cast
- 명령어
- 구조
- CPU
- 입출력
- 상속
- malloc
- 수학
- 백준
- 할당
- 클래스
- 크기
- 운영체제
- 포인터
- 스레드
- dynamic_cast
- 멀티스레드
- 레지스터
- 인터럽트
- 함수
- 알고리즘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |