공부/C#

[C#] string과 string의 내장 메소드에 대해 알아보자 (format, split, substring, compareTo, replace, length)

굴러다니다니 2023. 3. 21. 14:23
728x90

String 문자열에 대해 알아보자.

string은 문자열 타입 / char는 문자, 즉 단일 문자 타입이다.

이를 다시 생각해보면 

문자열 = 문자의 집합 = char의 집합

이 되는데 사실 이를 이용해 string에 내장된 builtin method를 직접 구현할 수도 있다.

 

코딩을 하다보면 자주 나오는 string의 method는 아래 5가지와 메소드는 아니지만 string 변수 Length까지 있다.
            1. Format()     - 형식을 정한다.
            2. Split()      - 문자열을 나눈다.
            3. Substring()  - 포함된 문자(char)를 뺀다.
            4. compareTo()  - 문자열의 비교, int를 return한다. 앞인지 뒤인지 판별해 자리 리턴
                                      - 비교하는 문자가 같으면 0 리턴, 비교하는 문자가 다르다면 1, -1 리턴
                                      - 같으면 0, 다르면 1이나 -1을 return하는데 비교하는 문자보다 정렬순이 작으면 -1, 크면 
            5. replace()    - 특정 문자를 검색해서 그 문자를 변경한다. 

                       => 쓰지말고 그냥 equal쓰자 (보통 0이 false인데 쟤는 일치하면 0 리턴하는게 구림)
            *  length       - 문자열의 길이, int를 return한다.

위의 6가지 친구들에 대해 예시와 함께 살펴보자

 


string.Format()

string str = "C# programming study";
string str_1 = "C#";
string str_2 = "programming";

string format_str_1 = string.Format("{0} {1}", str_1, str_2);
string format_str_2 = string.Format($"{str_1} {str_2}");

Console.WriteLine(format_str_1);
Console.WriteLine();  //string format이 감춰서 들어가있다
Console.WriteLine(format_str_2);

format 함수는 string 문자열을 string에 대입한다고 공식문서에 나와있다.

위의 코드를 실행해보면 format_str_1에는 str_1과 str_2를 ""안에 넣어둔 형태 자체로 string의 값을 가지게 된다.

str_2도 위의 결과와 동일하지만 다르게 작성된 코드이다.

이를 통해 Console.WriteLine에는 string format이 감춰서 들어가 있다는 점까지 생각해 볼 수 있다.

 

string.Split()

string str_sp = "I don't care";
string[] str_arr = str_sp.Split('c');
for (int i =0; i < str_arr.Length; i++)
{
	Console.WriteLine(str_arr[i]);
}

Split 함수는 나눈다고 생각하기 쉽지만, 실제로 돌려보면 char를 하나 제거하는 느낌에 더 가깝다.

또한 string.Split의 결과로 string의 배열이 나오기 때문에 이를 받아 출력하려면  for문으로 하나하나 원소에 접근해야한다.

실행하면 I don't are이 줄바꿈 포함해서 나온다

 

string.Substring()

string str_substring = "가나다라마바사";
string str_substring_c_1 = str_substring.Substring(3); //시작지점과 길이 /int 하나면 시작지점, 끝까지 출력
string str_substring_c_2 = str_substring.Substring(0, 3); //앞 3개 나옴 뽑아냄
Console.WriteLine(str_substring_c_1);
Console.WriteLine(str_substring_c_2);

substring의 함수는 함수를 나누어 저장한다고 볼 수 있다.

substring은 매개변수로 int를 받으며, 하나의 정수만 받는다면 해당 시작지점부터 마지막까지의 문자열을 저장하고,

매개변수로 int를 두 개를 받으면 int부터 int까지의 문자열을 저장한다.

실행한다면

라마바사 \n 가나다라 가 나온다.

 

string.CompareTo()

string str = "태정태세";
int compare = str.CompareTo("태정");

bool iscompare = str.Equals("태정"); //equals 는 모든 변수에 들어있는 메소드, equals는 비교 메소드, ==는 비교 연산자,  반환 형태는 똑같은데 equals()가 더 빠르다.
Console.WriteLine(compare);
Console.WriteLine(iscompare); //아예 같지 않으면 false

CompareTo는 복잡한 함수이지만, 보통 equals 느낌으로 쓰인다.

문자열과 문자열이 아예 같다면 0을 출력한다. 하지만 이를 bool로 들어가면 0은 false를 의미하기 때문에 보통 equals 함수를 더 자주 이용한다.

 

더 자세히 말하자면 CompareTo는 문자열을 비교해 int를 return하며, 비교하는 문자가 같으면 0을, 다른데 비료하는 문자열보다 사전으로 정렬순이 작으면 -1, 크면 1을 리턴한다.

 

string.Replace()

string names = "가나 | 다라 | 마바 | 사 ";
names = names.Replace("가나", "초콜릿");
Console.WriteLine(names);

replace는 문자열에서 해당되는 부분의 문자열을 다른 문자열로 뒤바꿔놓는다.

string을 return하며, string 두개를 입력받는다

위의 코드를 실행한다면

초콜릿 | 다라 | 마바 | 사 가 나온다

 

string.Length

            string str_length = "프로그래머"; //띄어쓰기 포함으로 센다
            Console.WriteLine(str_length.Length);

Length는 문자열을 세는 변수로, int를 return한다.

띄어쓰기를 포함해서 세어 위의 식은 5가 나온다.

지난번에 언급했다시피 length는 이미 길이가 정해져있어서 쓰며, 가변적일때는 count를 쓴다.


이 외에 string에 이미 들어있는 메소드를 더 살펴보자.

 

String.IndexOf("문자 / 문자열") 

 - int값을 반환하며, " " 안의 문자나 문자열이 존재한다면 처음으로 발견되는 index값을, 존재하지 않는다면 -1을 반환한다.

 

String.lastIndexOf("문자 / 문자열") 

 - 문자열의 뒤에서 부터 지정된 문자열을 최초로 찾는 index를 반환하고, 발견하지 못한다면 -1을 반환한다.

 

String.Remove( int / int int )

 - 매개변수로 int를 받으며 한 개를 받으면 해당 위치의 문자를 삭제하는 새 문자열을 반환하고, 두 개를 받으면 해당 위치부터 위치까지를 삭제한 새 문자열을 반환한다.

 

String.ToUpper / ToLower() 

 - 문자열의 복사본을 대문자로 / 소문자로 변환해 반환한다.

 

String.Trim(char[] / char /  ) 

 - 매개변수를 입력하지 않는다면 선행 공백, 후행 공백을 모두 제거하며 char를 넣을시 해당 문자의 선행 / 후행 인스턴스를 모두 제거하고, char[]를 입력할 시 현재 문자열에서 배열의 문자 선행 항목과 후행 항목을 모두 제거한다.

 

String.ToCharArray( / int int)

 - 문자열을 char array로 바꾸거나, 지정된 부분 문자열에 있는 문자를 문자 배열에 복사한다.

728x90