달력

2

« 2025/2 »

  • 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
2016. 7. 9. 17:43

StringBuilder 클래스 프로그래밍/C#2016. 7. 9. 17:43

.NET Framework에서 StringBuilder 클래스

https://msdn.microsoft.com/ko-kr/library/2839d5h5(v=vs.110).aspx



1. String 개체는 변경할 수 없습니다(immutable).

2. System.String 클래스에서 메소드의 하나를 사용할 때마다 메모리에서 새 문자열 개체를 만들어지므로, 해당 새 개체에 대한 공간이 새로 할당됩니다.

3. 문자열을 반복적으로 수정해야 하는 경우, 새 문자열 개체를 만드는데 필요한 오버헤드가 증가하게 됩니다(costly).

4. System.Text.StringBuilder 클래스는 새 개체를 만들지 않고 문자열을 수정하고 싶을 때 사용될 수 있습니다.

5. 예를 들어 StringBuilder 클래스를 사용하면 루프에서 많은 문자열을 연결할 때 성능이 향상될 수 있습니다.


<System.Type 네임스페이스 가져오기>

1. StringBuilder 클래스는 System.Text 네임스페이스에 있습니다.

2. 코드에서 정규화된 형식 이름(a fully qualified type name)을 제공할 필요가 없도록 하려면 System.Text 네임스페이스를 가져올 수 있습니다.

using System;
using System.Text;

<StringBuilder 개체 인스턴스화>

1. 다음 예제와 같이 오버로드된 생성자 메서드 중 하나로 변수를 초기화하여 StringBuilder 클래스의 새 인스턴스를 만들 수 있습니다.

StringBuilder MyStringBuilder = new StringBuilder("Hello World!");

<용량 및 길이 설정>

1. StringBuilder는 캡슐화되는 문자열에서 문자 수를 확장할 수 있는 동적 개체(a dynamic object)이지만, 보관할 수 있는 최대 문자 수 값을 지정할 수 있습니다.

2. 이 값을 개체의 용량(the object of the capacity)이라고 하며, 현재 StringBuilder에 보관된 문자열의 길이와 혼동하지 마세요.

3. 예를 들어 길이가 5인 "Hello" 문자열을 사용하여 StringBuilder 클래스의 새 인스턴스를 만들고 개체의 최대 용량(a maximum capacity)을 25로 지정할 수 있습니다.

4. StringBuilder를 수정할 경우, 용량에 도달할 때까지 자체 크기(size for itself)를 재할당(reallocate) 할 수 없습니다.

5. 이 경우 새 공간이 자동으로 할당되고 용량은 두 배로 증가합니다.

6. 오버로드된 생성자 중 하나를 사용하여 StringBuilder 클래스의 용량을 지정할 수 있습니다.

7. 다음 예에서는 MyStringBuilder 개체를 최대 25개 공간으로 확장할 수 있도록 지정합니다.

StringBuilder MyStringBuilder = new StringBuilder("Hello World!", 25);

8. 또한(Additionally) 읽기/쓰기 Capacity 속성을 사용하여 개체의 최대 길이를 설정할 수 있습니다.

9. 다음 예에서는 Capacity 속성을 사용하여 최대 개체 길이를 정의합니다.

MyStringBuilder.Capacity = 25;

10. EnsureCapacity 메서드를 사용하여 현재 StringBuilder의 용량을 확인할 수 있습니다.

11. 용량이 전달된 값보다 크면 변경되지 않고, 용량이 전달된 값보다 작으면 현재 용량이 전달된 값과 일치하도록 변경됩니다.

12. Length 속성을 보거나(view) 설정할(set) 수도 있습니다.

13. Length 속성을 Capacity 속성보다 큰 값으로 설정하면 Capacity 속성이 Length 속성과 동일한 값으로 자동으로 변경됩니다.

14. Length 속성을 현재 StringBuilder 내의 문자열 길이보다 작은 값으로 설정하면 문자열이 단축됩니다

<StringBuilder 문자열 수정>

1. 다음 표에서는 StringBuilder의 내용을 수정하는 데 사용할 수 있는 메서드를 보여 줍니다.

메서드 이름

기능

StringBuilder.Append

현재 StringBuilder의 끝에 정보를 추가합니다.

StringBuilder.AppendFormat

문자열에 전달된 서식 지정자를 서식 있는 텍스트로 바꿉니다.

StringBuilder.Insert

현재 StringBuilder의 지정된 인덱스에 문자열 또는 개체를 삽입합니다.

StringBuilder.Remove

현재 StringBuilder에서 지정된 수의 문자를 제거합니다.

StringBuilder.Replace

지정된 인덱스에서 지정된 문자를 바꿉니다.

<Append>

1. Append 메서드를 사용하여 현재 StringBuilder에 표시되는 문자열의 끝에 개체의 문자열 표현이나 텍스트를 추가(append)할 수 있습니다.

2. 다음 예에서는 StringBuilder를 "Hello World"로 초기화한 다음 개체의 끝에 일부 텍스트를 추가합니다.

3. 필요한 경우 공간이 자동 할당(allocate)됩니다.

StringBuilder MyStringBuilder = new StringBuilder("Hello World!");
MyStringBuilder.Append(" What a beautiful day.");
Console.WriteLine(MyStringBuilder);
// The example displays the following output:
//       Hello World! What a beautiful day.


<AppendFormat>

1. String.AppendFormat 메서드는 StringBuilder 개체의 끝에 텍스트를 추가합니다.

2. 서식 지정할 개체의 IFormattable 구현을 호출하여 복합 서식 지정 기능을 지원합니다. 자세한 내용은 복합 형식 지정 참조

3. 따라서, 숫자, 날짜 및 시간, 열거형 값에 대한 표준 서식 문자열, 숫자, 날짜 및 시간 값에 대한 사용자 지정 서식 문자열, 사용자 지정 형식에 대해 정의된 서식 문자열을 허용합니다.

4. 서식 지정에 대한 자세한 내용은 .NET Framework의 형식 서식 지정을 참조하세요.

5. 이 메서드를 사용하여 변수의 서식을 사용자 지정하고 해당 갓을 StringBuilder에 추가할 수 있습니다.

6. 다음 예제에서는 AppendFormat 메서드를 사용하여 통화 값으로 서식 지정된 정수 값을 StringBuilder 개체의 끝에 배치합니다.

int MyInt = 25; 
StringBuilder MyStringBuilder = new StringBuilder("Your total is ");
MyStringBuilder.AppendFormat("{0:C} ", MyInt);
Console.WriteLine(MyStringBuilder);
// The example displays the following output:
//       Your total is $25.00      


<Insert>

1. Insert 메서드는 문자열 또는 객체를 현재 StringBuilder 객체의 지정된 위치에 추가합니다.

2. 다음 예제에서는 이 메서드를 사용하여 StringBuilder 객체의 여섯 번째 위치에 단어를 삽입합니다.

StringBuilder MyStringBuilder = new StringBuilder("Hello World!");
MyStringBuilder.Insert(6,"Beautiful ");
Console.WriteLine(MyStringBuilder);
// The example displays the following output:
//       Hello Beautiful World!


<Remove>

1. Remove 메서드를 사용하여 지정된 0부터 시작하는 인덱스를 시작으로 현재 StringBuilder 객체에서 지정된 수의 문자를 제거할 수 있습니다.

2. 다음 예제에서는 Remove 메서드를 사용하여 StringBuilder 객체를 단축합니다.

StringBuilder MyStringBuilder = new StringBuilder("Hello World!");
MyStringBuilder.Remove(5,7);
Console.WriteLine(MyStringBuilder);
// The example displays the following output:
//       Hello


<Replace>

1. Replace 메서드는 StringBuilder 객체 내의 문자를 다른 지정된 문자로 바꾸는 데 사용할 수 있습니다.

2. 다음 예제에서는 Replace 메서드를 사용하여 StringBuilder 객체에서 느낌표 문자(!)의 모든 인스턴스를 검색한 다음 물음표 문자(?)로 바꿉니다.

StringBuilder MyStringBuilder = new StringBuilder("Hello World!");
MyStringBuilder.Replace('!', '?');
Console.WriteLine(MyStringBuilder);
// The example displays the following output:
//       Hello World?


<StringBuilder 개체를 문자열로 변환>

1. StringBuilder 객체에 표시되는 문자열을 String 매개 변수를 가진 메서드에 전달하거나 사용자 인터페이스에 표시하려면 StringBuilder 객체를 String 객체로 변환해야 합니다.

2. StringBuilder.ToString 메서드를 호출하여 이 변환을 수행합니다.

3. 다음 예제에서는 다양한 StringBuilder 메서드를 호출한 다음 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





'프로그래밍 > C#' 카테고리의 다른 글

LINQ 정리  (1) 2016.07.28
형 변환 예제  (0) 2016.07.10
대리자 Action, Func  (0) 2016.07.08
String.Format 메서드  (0) 2016.06.28
String 클래스  (0) 2016.06.22
:
Posted by 지훈2