2024.01.15 오늘의 기록 StringBuilder

2024. 1. 15. 11:43카테고리 없음

 

StringBuilder는 변경 가능한 문자열 Class이다.

using System.Text; // StringBuilder 쓰기 위함
using UnityEngine;
 
public class SBTestScript : Monobehaviour
{
    string StringBuilderExample2()
    {
        // 80 character를 가질 StringBuilder 생성
        // "숫자 세기 시작: "이라는 문자열로 초기화
        StringBuilder sb = new StringBuilder("숫자 세기 시작: ", 80);
 
        // 문자의 배열을 StringBuilder 뒤에 Append하기
        sb.Append(new char[]{'1', '2', '3', '4', '5', '5'});
 
        // StringBuilder 제일 앞에 문자열 넣기
        sb.Insert(0, "[테스트용] ");
 
        // StringBuilder안의 모든 '5'를 '6으로 바꾸기'
        sb.Replace('5', '6');
        
        // StringBuilder안에 있는 문자열의 길이와 문자열 출력하기
        Debug.Log("길이: {0}, 문자열 내용: {1}", sb.Length, sb.ToString()); //문자열형식화
    }
    
    void Start()
    {
    	Debug.Log(StringBuilderExample2());
    }
}

 

StringBuilder 사용할 때 주의할 점

  • StringBuilder 클래스는 IndexOf()나 StartsWith() 같은 검색 메서드가 부족하다. 만약에 검색 메서드가 필요하다면 다시 String으로 변환해서 사용해야 한다. (부분 문자열의 인덱스 검색이 아니라 그저 포함관계만 알고 싶은 경우면 상관없다 - Contain메서드를 사용하면 된다)
  • 최대 용량인 StringBuilder.MaxCapacity가 되기 전까지 StringBuilder는 문자열을 담을 용량인 StringBuilder.Capacity가 부족하면 동적 할당을 계속해서 공간을 확보한다.
  • 최대 용량을 초과하면 ArgumentOutOfRangeException 또는 OutOfMemoryException 예외가 throw 된다.
  • StringBuilder와 String 인스턴스는 모두 UTF-16 인코딩으로 문자를 저장한다.

 

오늘의 코드카타 (https://www.acmicpc.net/problem/10871)

백준 C# 10871번

using System.Text;

namespace ConsoleApp14
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string[] input = Console.ReadLine().Split();
            string[] sequence = Console.ReadLine().Split();

            StringBuilder answer = new StringBuilder();


            for (int i = 0; i < int.Parse(input[0]); i++)
            {
                // 정수 x보다 작은 숫자들을 검출
                if (int.Parse(input[1]) > int.Parse(sequence[i]))
                {
                    // 해당 숫자들을 answer에 공백과 함께 추가한다.
                    answer.Append(sequence[i] + " ");
                }
            }
            // 정답 출력
            Console.WriteLine(answer.ToString());

        }
    }
}