C#/문법 정리

C# - String 클래스(String Class)

Khadra 2024. 7. 6. 08:04

String(문자열)은 프로그램에서 가장 많이 쓰이는 자료형이다.



키워드 string은 .NET의 System.String 클래스와 동일하다.

  • 문자열을 사용할 때 Stirng이나 소문자 string 어느 것을 사용해도 된다.

C# string은 불변(Immutable)이다.

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

string 클래스(String Class)

  • Length(속성)는 String 객체의 길이이다.

    • string은 문자 배열 처럼 인덱스로 String의 특정 위치에 있는 문자를 가져올 수 있다.
    • 예를 들어, s.Length, s[8]과 같이 사용할 수 있지만,
      둘 다 값을 가져올 수만 있고, 설정은 불가능하다.
      즉, int i = s.Length라고 쓸 수 있지만 s.Length = 5와 같이 쓸 수 없다.
      (마찬가지로 s[5] = 'a'와 같이 쓸 수 없다.)
  • Empty(필드)는 static readonly이고, 값은 길이가 0인 문자열, 즉 빈 문자열이다.

    • Empty와 Null은 다르다.
    • Null은 선언되고, 할당되지 않은 string을 의미하고, Empty 또는 ""는 빈 문자열이라는 뜻이다.
  • 매우 다양한 메소드들은 매개변수의 개수와 종류가 다양하게 중복되어 선언되어 있다.

    • 사용할 때는 마이크로소프트 문서를 참조하거나, 비주얼스튜디오의 인텔리센스 기능을 사용하는 것이 좋다.

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에서 앞뒤의 공백문자 또는 특정 문자를 제거한다.
TrimStart string에서 앞의 공백문자 또는 특정 문자를 제거한다.
TrimEnd string에서 뒤의 공백문자 또는 특정 문자를 제거한다.
Split string에서 substring을 추출하여 새로운 string 배열을 리턴한다.
CopyTo string의 일부분을 문자 배열로 복사한다.
Substring string에서 특정 문자에서 끝까지의 substring을 추출한다.


예제 코드

using System;
using static System.Console;//Console단어를 생략(코드길이줄어둠)
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            // string s를 " Hello, World! "로 할당. 앞뒤에 빈칸이 있다.
            string s = " Hello, World! ";
            // string t를 선언.
            string t;                    


             // s.Length는 문자열 s의 길이. 빈칸을 포함해서 15글자이다.
            WriteLine("s.Length:" + s.Length);
            // string은 문자 배열과 같이 인덱스로 값을 지정하거나 가져올 수 있다.
            WriteLine("[]: " + s[8] + "\n");  


             // Insert() 메소드는 특정 위치에 문자열을 삽입
            // 8번째 인덱스에 "C#"을 삽입하면 " Hello, C# World!"가 된다. 
            // Insert()메소드는 새로운 string을 리턴하므로 s는 바뀌지 않는다.
            WriteLine("s.Insert: " + s.Insert(8, "C# "));   


            // PadLeft() 메소드는 앞쪽에 특정 문자를 넣어서 문자열의 길이를 맞춘다.
            // s의 길이가 15이므로 앞에 점 5개가 출력된다.   
            WriteLine("s.PadLeft: " + s.PadLeft(20, '.'));  


            // PadRight() 메소드는 뒤 쪽에 특정 문자를 넣어서 뒤에 점 5가 출력된다.                                                                        
            WriteLine("s.PadRight: " + s.PadRight(20, '.'));


            // s.Remove(6) 메소드는 6번째 인덱스부터 끝까지 지워준다. 따라서 " Hello"만 출력된다.
            WriteLine("s.Remove: " + s.Remove(6));        


            // s.Remove(6,7) 메소드는 6번째 인덱스부터 7개의 문자까지 지워준다. 
            // 따라서 " Hello" 뒤의 ", World! "의 7개 문자가 지워져서 " Hello!"가 출력된다.   
            WriteLine("s.Remove2: " + s.Remove(6,7));      


            // s.Replace('l','m') 메소드는 'l'을 'm'으로 바꾸어 준다.
            //" Hemmo, Wormd! "가 출려된다.
            WriteLine("s.Replace: " + s.Replace('l','m'));  


            // ToLower() 메소드는 소문자로 바꾸어 준다.
            WriteLine("s.ToLower: " + s.ToLower());         


            // ToUpper() 메소드는 대문자로 바꾸어 준다. 
            WriteLine("s.ToUpper: " + s.ToUpper() + "\n");  


             // Trim() 메소드는 앞뒤의 공백문자을 제거한다.
            WriteLine("s.Trim: " + '/' + s.Trim() + '/'); 


            // TrimStart() 메소드는 앞쪽의 공백문자를 제거한다.
            WriteLine("s.TrimStart: " + '/' + s.TrimStart() + '/');


            // TrimEnd() 메소드는 뒤쪽의 공백문자를 제거한다.
            WriteLine("s.TrimEnd: " + '/' + s.TrimEnd() + '/' + "\n");


            // s.Split(',') 메소드는 문자열을 콤마로 구분하여 스트링 배열로 만든다.
            string[] a = s.Split(',');                          
            foreach (var i in a)                            
                WriteLine("[] a/s.Split: " + '/' + i + '/');
            WriteLine();


             // CopyTo() 메소드는 스트링의 일부분을 문자 배열로 저장한다.
            char[] destination = new char[10];   
            // 따라서 s.CopyTo(8, destination, 0, 6)은 s의 8번째 인덱스로부터
            // destination[] 배열의 0번 인덱스(맨앞)로 6개의 문자 "World!"를 복사한다. 
            s.CopyTo(8, destination, 0, 6);                      
            WriteLine("[] destination/s.CopyTo: " + destination);
            WriteLine();


             // Substring(x) 메소드는 x번째 인덱스로부터 맨 뒤까지의 문자열을 리턴한다.
            WriteLine("s.Substring: " + '/' + s.Substring(8) + '/');     


            // Substring(x,y) 메소드는 x번째 인덱스부터 y개의 문자열을 리턴한다.     
            WriteLine("s.Substring2: " + '/' + s.Substring(8,5) + '/' + "\n");


             // s.Contains("ll") 메소드는 s에 "ll"이라는 문자열이 있으면 true를 리턴한다.
            WriteLine("s.Contains: " + s.Contains("ll"));          
            // s.IndexOf('o') 메소드는 s에서 처음 나오는 'o'의 위치를 리턴한다.
            WriteLine("s.IndexOf: " + s.IndexOf('o'));           
            // s.LastIndexOf('o') 메소드는 s에서 맨 마지막으로 나오는 'o'의 위치를 리턴한다.  
            WriteLine("s.LastIndexOf: " + s.LastIndexOf('o'));     


            //s.CompareTo(t) 메소드는 s와 t를 사전식으로 비교하여 s가 t보다 
            //앞에 나오면 -값을,같으면 0을, s가 t보다 뒤에 나오면 +값을 리턴한다.
            //" Hello, World! "는 빈칸으로 시작하므로 "abc"보다 앞에 나오기 때문에 -1이 리턴된다.
            WriteLine("s.CompareTo: " + s.CompareTo("abc") + "\n");         
        }
    }
}

결과

s.Length: 15
[]: ₩

s.Insert:   Hello, C# World!
s.PadLeft:  ..... Hello, World!
s.PadRight:   Hello, World! .....
s.Remove:  Hello
s.Remove2:  Hello!
s.Replace:  Hemmo, Wormd!
s.ToLower:  hello, world!
s.ToUpper:  HELLO, WORLD!

s.Trim:  /Hello, World!/
s.TrimStart:  /Hello, World!/
s.TrimEnd:  /Hello, World!/

[] a/s.Split:  / Hello/
[] a/s.Split:  / World! /

[] destination/s.CopyTo:  System.Char[]

s.Substring: /World! /
s.Substring2: /World/

s.Contains: True
s.IndexOf: 5
s.LastIndexOf: 9
s.CompareTo: -1