본문 바로가기
Program Language/C#

Part1. C# 첫발 내딛기(20. String 클래스)

by 토담이아빠 2023. 1. 13.

String 클래스

 

원래는 이번 포스팅에서 연산자에 대해서 추가적으로 정리하려고 했습니다.  하지만 대부분 언어의 연산자가 사용법이 비슷하고, 또 현재 같이 정리하고 있는 c++과 중복되는 내용이 많아서 추가적인 연산자 관련 내용은 생략하였습니다. 그래서 이번 내용은  String 클래스에 대해서 정리할까 합니다.


String 클래스

 

문자열(string)은 겹 따옴표(")를 사용하여 표현되며, 단일 문자(char)는 홑 따옴표(')를 사용하여 표현됩니다. C#에서 문자열 자료형은 대문자 String이나 소문자 string 둘 다 사용가능합니다.

 

C#의 string은 한 번 문자열이 설정이 되면 다시 변경할 수 없습니다. 예를 들어 string s에 s = "Hello"라고 대입한 후 다시 s = "World"라고 하면 .NET 시스템은 새로운 string객체를 생성하여 "World"라는 데이터로 초기화한 후 이를 변수명 s에 할당합니다.이전의 "Hello"를 저장하고 있던 메모리는 개비지 콜렉터에 의해 시스템에 반환됩니다. 

 

string은 문자 배열처럼 인덱스로 특정위치의 문자를 가져 올 수 있습니다. 예를 들어 s[8]과 같이 사용하면 9번째 위치에 있는 문자를 가져올 수 있습니다. 다만 가져올 수는 있지만 할당할 수는 없습니다. 이는  Length 멤버도 마찬가지입니다. 문자열의 길이 값을 가져올 수는 있지만 할당할 수는 없습니다.

 

string 클래스의 멤버 중 Empty가 있습니다. 이는 길이가 0인 빈 문자열을 뜻합니다. Empty와 Null은 다릅니다. Null은 선언되고 할당되지 않은 문자열을 의미하고 Empty는 ""와 같은 빈 문자열을 뜻하기 때문입니다.

 

string 클래스의 메서드

string 클래스의 멤버는 매우 다양합니다. 다음은 많이 사용되는 문자열을 메소드를 정리한 표입니다.


메소드 동작
Insert string 안의 특정 위치에 string을 삽입합니다.
Contains 특정 문자 또는 문자열을 포함하는지 true / false로 리턴합니다.
CompareTo string을 비교해서 작으면 -값, 같으면 0, 크면 +를 리턴합니다.
IndexOf string에서 특정 문자 또는 문자열이 처음으로 나오는 index를 리턴합니다.
LastIndexOf string에서 특정 문자 또는 문자열이 처음으로 나오는 index를 리턴합니다.
PadLeft string 앞에 특정 문자를 삽입하여 글자 수를 맞춥니다.
PadRight string 뒤에 특정 문자를 삽입하여 글자 수를 맞춥니다.
Remove string에서 substring을 삭제합니다.
Replace string에서 문자 혹은 substring을 다른 문자 혹은 substring으로 대체합니다.
ToLower string의 문자를 소문자로 변환합니다.
ToUpper string의 문자를 대문자로 변환합니다.
Trim string에서 앞뒤의 공백문자 또는 특정 문자를 제거합니다.
TrimEnd string의 뒤 공백문자 또는 특정 문자를 제거합니다.
TrimStart string의 앞 공백문자 또는 특정 문자를 제거합니다.
Split string의 substring을 추출하여 새로운 string 배열을 리턴합니다.
CopyTo string의 일부분을 문자 배열로 복사합니다.
Substring string에서 특정 문자에서 끝까지의 substring을 추출합니다.

정적 메소드(Static Method)는 객체에 사용되는 멤버 메서드와 달리 클래스 자체에 적용되는 메서드입니다. string 클래스의 정적메소들은 String.Format(), String.Compare()와 같이 클래스 이름 뒤에 닷(.) 연산자와 함께 사용됩니다. 다음은 string 클래스의 대표적은 정적 메서드들입니다.


정적 메소드 동작
Concat 한 개 이상의 substring을 합쳐서 새로운 string을 만듭니다.
Compare 두 개의 string을 비교해서 상대적인 위치를 리턴합니다.
Copy 현재 string을 복사하여 새로운 string을 만듭니다.
Format 문자열을 포멧에 맞추어 변경합니다.
Join 배열이나 커렉션의 멤버들을 모아서 새로운 string을 만듭니다. 이때 멤버 사이에 구분자를 삽입합니다.

다음은 위의 메서드들을 사용한 예제입니다.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace StringMethods
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string s = " Hello, World! ";
            string t;

            Console.WriteLine(s.Length);
            Console.WriteLine(s[8]);
            Console.WriteLine(s.Insert(8, "C# "));
            Console.WriteLine(s.PadLeft(20, '.'));
            Console.WriteLine(s.PadRight(20, '.'));
            Console.WriteLine(s.Remove(6));
            Console.WriteLine(s.Remove(6, 7));
            Console.WriteLine(s.Replace('l', 'm'));
            Console.WriteLine(s.ToLower());
            Console.WriteLine(s.ToUpper());
            Console.WriteLine('/' + s.Trim() + '/');
            Console.WriteLine('/' + s.TrimStart() + '/');
            Console.WriteLine('/' + s.TrimEnd() + '/');

            string[] a = s.Split(',');
            foreach (var i in a)
                Console.WriteLine('/' + i + '/');

            char[] destination = new char[10];
            s.CopyTo(8, destination, 0, 6);
            Console.WriteLine(destination);
            Console.WriteLine('/' + s.Substring(8) + '/');
            Console.WriteLine('/' + s.Substring(8, 5) + '/');

            Console.WriteLine(s.Contains("He"));
            Console.WriteLine(s.IndexOf('o'));
            Console.WriteLine(s.LastIndexOf('o'));
            Console.WriteLine(s.CompareTo("abc"));

            Console.WriteLine(String.Concat("Hi!", s));
            Console.WriteLine(String.Compare("abe", s));
            Console.WriteLine(t = String.Copy(s));

            String[] val = {"apple", "orange", "grape", "pear" };
            String result = String.Join(", ", val);
            Console.WriteLine(result);
        }
    }
}

결과

15
W
 Hello, C#World!
..... Hello, World!
 Hello, World! .....
 Hello
 Hello!
 Hemmo, Wormd!
 hello, world!
 HELLO, WORLD!
/Hello, World!/
/Hello, World! /
/ Hello, World!/
/ Hello/
/ World! /
World!
/World! /
/World/
False
5
9
-1
Hi! Hello, World!
1
 Hello, World!
apple, orange, grape, pear

[Review]

"초보자를 위한 C# 200제(2판)"  저자 / 강병익

 

댓글