본문 바로가기
코딩테스트 준비/자료구조 & 알고리즘

C# - StringBuilder

by 코딩하는 돼징 2023. 4. 9.
반응형

String

String 개체는 변경할 수 없다. System.String 클래스에서 메서드 중 하나를 사용할 때마다 메모리에 새 문자열 개체가 생성되므로, 새 개체에 대한 공간을 새로 할당 되어진다. 그러므로 문자열을 반복적으로 수정해야 하는 경우 메모리 낭비가 발생되어 비효율적인 코드가 생성된다.

string example = "string";
Console.WriteLine(example);
example = "Hello";
Console.WriteLine(example);

StringBuilder

01 System.Text 네임 스페이스 가져오기

StringBuilder 클래스는 System.Text 네임스페이스에 있으므로 using문에 System.Text를 추가한다.

using System;
using System.Text;

02 StringBuilder 객체 인스턴스화 및 초기화

// StringBuilder 객체 인스턴스화 및 초기화
StringBuilder myStringBuilder = new StringBuilder("Hello World");

 

객체, 인스턴스화 차이 알아보기

더보기

클래스 - 객체들을 소프트웨어 내에서 구현하기 위해 만든 설계도

인스턴스화 - 클래스를 가지고 객체를 만드는 일 (ex) 설계도로부터 실체를 만들어 내는 일)

인스턴스(객체) - 클래스의 실현체 (ex) 설계도로부터 만들어낸 실체, 클래스가 붕어빵 틀이라면 붕어빵 하나하나가 클래스의 인스턴스)

객체 - 자신의 속성을 가지고 있고, 다른 것과 식별 가능한 

클래스 -> 인스턴스화 -> 인스턴스

사진 참조 : https://zamezzz.tistory.com/116

 


03 SringBuilder 용량 및 길이 설정

StringBuilder는 문자 수를 확장할 수 있는 동적 개체지만 보관할 수 있는 최대 문자수 값을 지정할 수 있다.

StringBuilder myStringBuilder = new StringBuilder("Hello World",25);

04 Append

Append 메서드를 사용하여 문자열 끝에 추가할 수 있다.

public System.Text.StringBuilder Append (System.Text.StringBuilder? value);
StringBuilder myStringBuilder = new StringBuilder("Hello World",25);
myStringBuilder.Append("Hi");
Console.WriteLine(myStringBuilder);


05 AppendLine

현재 StringBuilder 객체 끝에 지정한 문자열의 복사본과 기본줄 종결자를 추가한다.

public System.Text.StringBuilder AppendLine (String);
StringBuilder sb = new StringBuilder();
sb.AppendLine("First Line");
sb.AppendLine("Second Line");
sb.AppendLine("Third Line");

Console.WriteLine(sb.ToString());


06 Insert

지정된 개체의 문자열 표현을 지정된 문자 위치에 있는 인스턴스에 삽입한다.

public System.Text.StringBuilder Insert (int index, string? value);

매개변수

int index : insert 시작 인스턴스 내의 위치

string value : 삽입할 문자열

지정된 위치에 개체를 추가할 수 있다.

StringBuilder myStringBuilder = new StringBuilder("Hello World",25);
myStringBuilder.Insert(5,"Hi");
Console.WriteLine(myStringBuilder);


07 Remove

인덱스를 기준으로 지정된 수의 문자를 제거할 수 있다.

public System.Text.StringBuilder Remove (int startIndex, int length);

매개변수

startIndex : 제거가 시작되는 위치

length : 제거할 문자 갯수

StringBuilder myStringBuilder = new StringBuilder("HelloHiWorld", 25);
myStringBuilder.Remove(5, 2);
Console.WriteLine(myStringBuilder);


08 Replace

public System.Text.StringBuilder Replace (char oldChar, char newChar);
public System.Text.StringBuilder Replace (char oldChar, char newChar, int startIndex, int count);
public System.Text.StringBuilder Replace (String oldString, String newString);

매개변수

oldChar : 바꿀 문자

newChar : oldChar를 바꾸는 문자

startIndex : 부분 문자열이 시작되는 인스턴스 내 위치

count : 부분 문자열 길이

StringBuilder myStringBuilder = new StringBuilder("HelloHiWorld", 25);
myStringBuilder.Replace("H", "Z");
myStringBuilder.Replace("Zello", "Hello");
Console.WriteLine(myStringBuilder);


08 AppendFormat

public System.Text.StringBuilder AppendFormat (string format, object? arg0, object? arg1);

매개변수

format String : 복합 형식 문자열

arg0 Object : 서식을 지정할 첫 번째 개체

arg1 Object : 서식을 지정할 두 번째 개체

int a = 123;
double b = 12.3;
string c = "abcd";
string[] d= {"cat", "dog", "duck" };
StringBuilder sb = new StringBuilder();
sb.AppendFormat($"1번 {a} ");
Console.WriteLine(sb.ToString());
sb.AppendFormat($"2번 {b} ");
Console.WriteLine(sb.ToString());
sb.AppendFormat($"3번 {a} {b} ");
Console.WriteLine(sb.ToString());
sb.AppendFormat("4번 {0} {1} {2}",d);
Console.WriteLine(sb.ToString());


09 ToString

인스턴스의 값을 String으로 변환

public override string ToString ();
StringBuilder sb = new StringBuilder("Hello");
Console.WriteLine($"{sb.Length} chars : {sb.ToString()}");


 

 

 

참고 

https://learn.microsoft.com/ko-kr/dotnet/api/system.text.stringbuilder?view=net-7.0

https://learn.microsoft.com/ko-kr/dotnet/standard/base-types/stringbuilder

반응형

댓글