-
String BuilderProgramming/C# 2013. 12. 12. 11:36
StringBuilder 객체는 string과 마찬가지로 문자열을 담는 역할을 하지만, 차이점이 있습니다. 그것은 문자열을 수정할 수 있다는 점입니다. 이러한 특성을 C#에서는 mutable이라고 합니다.
StringBuilder 객체 정의하기
StringBuilder 객체를 정의할 때에도 문자열의 내용을 다음과 같은 형식으로 기입해 주시면 됩니다.
StringBuilder 변수_이름 = new StringBuilder(문자열_내용);
위 형식을 구성하는 요소들을 다음과 같이 정리하였습니다.
구성 요소
설명
변수_이름
StringBuilder 객체의 이름을 정합니다. 문자열_내용
StringBuilder 객체가 보유할 문자열의 내용을 기입합니다. 방법은 다음과 같습니다.
1. 따옴표(") + 문자열 내용 + 따옴표(")
(예) StringBuidler greeting = new StringBuilder("Hello.");
2. string 변수의 이름
(예) string str = "Hello.";
StringBuidler greeting = new StringBuilder(str);
3. 그 외 여러가지들이 있습니다. 다음 사이트를 참조하시기 바랍니다.
http://msdn.microsoft.com/en-us/library/system.text.stringbuilder.aspx
StringBuilder로 할 수 있는 작업들
StringBuilder는 문자열의 내용을 수정하는 메소드들을 제공합니다. 이들을 다음 표로 정리하오니 참고하시기 바랍니다.
원하는 작업
StringBuilder가 제공하는
필드 또는 메소드
사용 예
출력 결과
새로운 문자열을 뒤에 추가한다.
StringBuilder Append(string value)
StringBuilder strBldr
= new StringBuilder("Super");
strBldr.Append(" Star");
Console.WriteLine(strBldr.ToString());
Super Star
(해설: "Super" 뒤에 " Star"가 추가되어 "Super Star"가 됩니다.)
중간에 문자열을 삽입한다.
StringBuilder Insert(
int index, // 이 위치에
string value) // 를 삽입
StringBuilder strBldr
= new StringBuilder("Super Star");
strBldr.Insert(6, "Real ");
Console.WriteLine(strBldr.ToString());
Super Real Star
(해설: 현재 문자열의 6번째 위치는 두번째 S이고, 이 위치부터 문자열 "Real "이 삽입됩니다.)
현재 문자열의 일부를 지운다.
StringBuilder Remove(
int startIndex, // 이 위치부터
int length) // length개의 문자들을 제거
StringBuilder strBldr
= new StringBuilder("Super Star");
strBldr.Remove(3, 5);
Console.WriteLine(strBldr.ToString());
Supar
문자열의 일부를 다른 것으로 대체한다.
StringBuilder Replace(
char oldChar, // 를
char newChar) // 로 교체
StringBuilder strBldr
= new StringBuilder("Super Star");
strBldr.Replace('S', 's');
Console.WriteLine(strBldr.ToString());
super star
〃
StringBuilder Replace(
string oldValue, // 를
string newValue) // 로 교체
StringBuilder strBldr
= new StringBuilder(
"One little, two little Indians");
strBldr.Replace("little", "big");
Console.WriteLine(strBldr.ToString());
One big, two big Indians
〃
StringBuilder Replace(
char oldChar, // 를
char newChar, // 로 교체
int startIndex, // 교체 범위의 시작 위치
int count) // startIndex ~ startIndex + count
StringBuilder strBldr
= new StringBuilder(
"One little, two little Indians");
strBldr.Replace('l', 'L', 0, 8);
Console.WriteLine(strBldr.ToString());
One Little, two little Indians
〃
StringBuilder Replace(
string oldValue, // 를
string newValue, // 로 교체
int startIndex, // 교체 범위의 시작 위치
int count) // startIndex ~ startIndex + count
StringBuilder strBldr
= new StringBuilder(
"One little, two little Indians");
strBldr.Replace("little", "big", 15, 10);
Console.WriteLine(strBldr.ToString());
One little, two big Indians StringBuilder 객체를 string 형으로 바꾼다.
string ToString()
StringBuilder strBldr
= new StringBuilder("Hello.");
Console.WriteLine(strBldr.ToString());
Hello.
형식에 맞춘 문자열을 추가하고 싶다.
AppendFormat(
string format,
params Object[] args)
string name1 = "Park", name2 = "Son";
StringBuilder strBldr
= new StringBuilder(
"One little, two little Indians");
strBldr.AppendFormat(
"\nTheir names: {0}, {1}",
name1, name2
);
Console.WriteLine(strBldr.ToString());
One little, two little Indians
Their names: Park, Son1234567891011121314151617181920212223242526272829303132333435363738394041424344454647class
StBuilder
{
public
static
void
Main()
{
StringBuilder sb =
new
StringBuilder(
"Hello"
);
Console.WriteLine(
"문자열 {0}"
, sb);
//capacity - 객체의 용량 반환, 50으로 설정해도 자동으로 64로 됨
Console.WriteLine(
"해시코드 : {0}, 전체공간 : {1}, 문자열 길이:{2} "
, sb.GetHashCode(), sb.Capacity, sb.Length);
sb.Append(
"World!!~!~!~~!!!"
);
Console.WriteLine(
"문자열 {0}"
, sb);
Console.WriteLine(
"해시코드 : {0}, 전체공간 : {1}, 문자열 길이:{2} "
, sb.GetHashCode(), sb.Capacity, sb.Length);
sb.EnsureCapacity(50);
//string 객체를 배열처럼 다룰수도 있음
sb[0] =
'Y'
;
sb[6] =
'p'
;
Console.WriteLine(
"h-y, y-p 변경 : {0}"
, sb.ToString());
//전체 문자열
Console.WriteLine(
"해시코드 : {0}, 전체공간 : {1}, 문자열 길이:{2}, 최대 가능 공간 : {3} "
, sb.GetHashCode(), sb.Capacity, sb.Length, sb.MaxCapacity);
}
}
1. 일반적인 사용법 1234567891011121314151617181920212223242526272829using
System;
using
System.Text;
using
System.Diagnostics;
class
Program
{
static
void
Main()
{
// 1.
// Declare a new StringBuilder.
StringBuilder builder =
new
StringBuilder();
// 2.
builder.Append(
"The list starts here:"
);
// 3.
builder.AppendLine();
// 4.
builder.Append(
"1 cat"
).AppendLine();
// 5.
// Get a reference to the StringBuilder's buffer content.
string
innerString = builder.ToString();
// Display with Debug.
Debug.WriteLine(innerString);
}
}
2. 교체 및 삽입 1234567891011121314using
System;
using
System.Text;
class
Program
{
static
void
Main()
{
StringBuilder builder =
new
StringBuilder(
"This is an example string that is an example."
);
builder.Replace(
"an"
,
"the"
);
// Replaces 'an' with 'the'.
Console.WriteLine(builder.ToString());
Console.ReadLine();
}
}
3. 루프 foreach 사용 1234567891011121314151617181920using
System;
using
System.Text;
class
Program
{
static
void
Main()
{
string
[] items = {
"Cat"
,
"Dog"
,
"Celebrity"
};
StringBuilder builder2 =
new
StringBuilder(
"These items are required:"
).AppendLine();
foreach
(
string
item
in
items)
{
builder2.Append(item).AppendLine();
}
Console.WriteLine(builder2.ToString());
Console.ReadLine();
}
}
4. 많은 스트링 빌더 사용시 12345678910111213141516171819202122232425262728293031using
System;
using
System.Text;
class
Program
{
static
string
[] _items =
new
string
[]
{
"cat"
,
"dog"
,
"giraffe"
};
/// <summary>
/// Append to a new StringBuilder and return it as a string.
/// </summary>
static
string
A1()
{
StringBuilder b =
new
StringBuilder();
foreach
(
string
item
in
_items)
{
b.AppendLine(item);
}
return
b.ToString();
}
static
void
Main()
{
// Called in loop.
A1();
}
}
'Programming > C#' 카테고리의 다른 글
.NET 프로그램에서 확장(Extension) DLL 불러오기 (0) 2014.03.26 대화창 자동 스크롤 (0) 2013.12.12 명명 규칙 (C#) (0) 2013.11.13 더블 버퍼링 (0) 2013.11.13 C# 참고 사이트 (0) 2013.09.13