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());
}
}
}