C#

C# 문자열, 문자, 문자배열, StringBuilder 클래스

littlemk 2018. 7. 19. 15:54

C# 문자열 


문자열(string)은 프로그램에서 가장 많이 쓰이는 데이타 타입 중의 하나이다.
C#에서 문자열(string)은 이중부호를 사용하여 표현되며, 단일 문자(char)는 단일부호를 사용하여 표현된다.

C#의 키워드 string은 .NET의 System.String 클래스와 동일하며, 따라서 System.String 클래스의 모든 메서드와 속성(Property)을 사용할 수 있다. 예를 들어 일정 문자열 부분만 뽑아내는 Substring() 메서드, 문자열 길이를 구하는 Length 속성 등을 모두 사용할 수 있다.

C# 문자열(String)은 Immutable 즉 한번 문자열이 설정되면, 다시 변경할 수 없다. (주: 한번 그 값이 설정되면 다시 변경할 수 없는 타입을 Immutable Type이라 부르고, 반대로 값을 계속 변경할 수 있는 것을 Mutable Type이라 부른다)

예를 들어, 문자열 변수 s 가 있을 때, s = "C#"; 이라고 한 후 다시 s = "F#"; 이라고 실행하면, 
.NET 시스템은 새로운 string 객체를 생성하여 "F#"이라는 데이타로 초기화 한 후 이를 변수명 s 에 할당한다. 즉, 변수 s 는 내부적으로는 전혀 다른 메모리를 갖는 객체를 가리키는 것이다.

 

C# 문자열 예제

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StringTest
{
       class Program
       {
              static void Main(string[] args)
              {
                     // 문자열(String) 변수
                     string s1 = "C#";
                     string s2 = "프로그래밍";
                     Console.WriteLine("s1: {0}\ns2: {1}", s1, s2);
                     // 문자(Char) 변수
                     char c1 = 'A';
                     char c2 = 'B';
                     Console.WriteLine("c1: {0}\nc2: {1}", c1, c2);
                     // 문자열 결합
                     string s3 = s1 + " " + s2;
                     Console.WriteLine("String : {0}", s3);
                     // 부분문자열 발췌
                     string s3substring = s3.Substring(0, 8);
                     Console.WriteLine("Substring: {0}", s3substring);
                     // 문자열 변수 테스트
                     string s = "C#";
                     s = "F#";
                     Console.WriteLine("문자열 변수 테스트 : {0}", s);
              }
       }
}






C# 문자열, 문자, 문자배열 


문자열(string)문자(character)의 집합체이다. 
문자열 안에 있는 각 문자를 엑세스하고 싶으면, [인덱스] (square bracket)을 사용하여 문자 요소를 엑세스한다.

예를 들어, 자열 변수 s가 "Hello" 값을 가지고 있을 때, s[0]이라고 하면 첫번째 문자 H를, s[1]이라 하면 두번째 문자 e 를 리턴한다.
이는 문자열을 문자배열처럼 취급하는 것으로 일반 C# 배열과 마찬가지로 첫번째 요소는 [0]으로 엑세스한다.

문자배열(char array)을 문자열(string)으로 변환하기 위해서는 아래와 같이 new string(문자배열)을 사용한다.

하나의 문자는 상응하는 ASCII 코드 값을 가지는데, 예를 들어 대문자 A는 65, B는 66, Z는 90을 갖는다.
소문자는 a가 97, b가 98, ... 등을 갖는다. 하나의 문자는 이처럼 숫자값으로 표현되므로 문자에 숫자를 더하거나 빼면 다른 문자로 표현될 수 있다. 예를 들어 문자A 를 갖는 변수에 1을 더하면 66이 되어 문자 B가 된다. 



C# 문자열, 문자, 문자배열 예제

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CharArrayTest01
{
       class Program
       {
              static void Main(string[] args)
              {
                     // 문자열을 배열인덱스로 한 문자씩 엑서스
                     // i를 변수로 두고 문자열 s 변수의 길이 만큼 루프 돌리기
                     string s = "C# 공부중이예요.";
                     for (int i = 0; i < s.Length; i++) {
                           //루프된 값 출력
                           Console.WriteLine("{0} : {1}", i, s[i]);
                     }
                     // 문자열을 문자배열로 변환
                     // ToCharArray 메서드 문자열 문자 배열에 문자를 추출
                     string str = "HELLO";
                     char[] charArray = str.ToCharArray();
                     for (int i = 0; i < charArray.Length; i++)
                     {
                           Console.WriteLine(charArray[i]);
                     }
                     // 문자배열을 문자열로 변환
                     char[] charArray2 = { 'A', 'B', 'C', 'D' };
                     s = new string(charArray2);
                     Console.WriteLine(s);
                     // 문자 연산
                     char c1 = 'd';
                     char c2 = (char)(c1+3);
                     char numc1 = '0';
                     char numc2 = (char)(numc1+2);
                     Console.WriteLine("c1: {0}\nc2: {1}", c1, c2);
                     Console.WriteLine("numc1: {0}\numc2: {1}", numc1, numc2);
              }
       }
}



참고 사이트 :: https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/char (마이크로소프트 char(C# 참조))





C# StringBuilder 클래스 


문자열을 다루는데 중요한 클래스 중의 하나는 System.Text.StringBuilder 클래스이다. 
String 클래스는 위에서 설명한 대로 Immutable Type이기 때문에, 문자열 갱신을 많이 하는 프로그램에는 적당하지 않다. 
반면, Mutable 타입인 StringBuilder 클래스는 문자열 갱신이 많은 곳에서 자주 사용되는데 이는 이 클래스가 별도 메모리를 생성, 소멸하지 않고 일정한 버퍼를 갖고 문자열 갱신을 효율적으로 처리하기 때문이다.

특히 루프 안에서 계속 문자열을 추가 변경하는 코드에서는 string 대신 StringBuilder를 사용해야 한다. 

즉, StringBuilder 메서드는 string과 마찬가지로 문자열을 담는 역할을 하되, 문자열을 수정할 수 있다.
ex) StringBuilder 변수_이름 = new StringBuilder(문자열_내용);


C# StringBuilder 클래스 예제

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StringBuilderTest
{
       class Program
       {
              static void Main(string[] args)
              {
                     /*
                           StringBuilder 메서드는 String 과 비슷한 기능을 하지만,
                           문자열을 수정할 수 있다.
                           Tostring() 메서드는 int 형식의 모든 변수에 해당 내용을 문자열로 변환할 수 있도록 한다.
                           Append() 메서드는 문자열의 복사본을 만들어 인스턴스의 끝에 추가한다.
                           sbtest.Append(System.Environment.NewLine); -> 줄바꿈 문자열
                      */
                     StringBuilder sbtest = new StringBuilder();
                     for (int i = 1; i <= 26; i++)
                     {
                           sbtest.Append(i.ToString());
                           sbtest.Append(System.Environment.NewLine);
                     }
                     string test = sbtest.ToString();
                     Console.WriteLine(test);
              }
       }
}



참고 사이트 :: 
http://www.dreamy.pe.kr/zbxe/CodeClip/158356 (StringBuilder로 문자열 처리를 빠르게)
http://www.csharpstudy.com/CSharp/CSharp-string.aspx
http://imagej.tistory.com/70 (C#의 String 메서드 + 연산보단 StringBuilder::Append()를 사용하자.)



'C#' 카테고리의 다른 글

Dictionary<string,List<string>> 타입 첫 번째 Value만 추출하기  (0) 2020.03.17
C# 배열 (Array)  (0) 2018.07.19
C# 변수  (0) 2018.07.19
C#이란? , C# 데이터타입  (0) 2018.07.19
C# 기본 정리 (Value Type vs Reference Type)  (0) 2018.07.19