프로그래밍 C#언어

String (문자열)

게임첫걸음 2024. 8. 30. 15:45
//Namespace
using System;
using System.Text;

class Program
{
    static void Main()
    {
        //문자열(String)
        char[] charArr = { 'K', 'J', 'H', '\0' };
        Console.WriteLine(charArr); //C#은 Write문에서 배열도 모두 출력해줌. 오버로드 때문에.

        string strTest = new string("strTest"); //string은 class, Unit Code(유니코드) 사용해줌.
        string strChar = new string(charArr);
        string strConst = "strConst";

        Console.WriteLine("ToUpper: "+ strTest.ToUpper());  //strTest를 모두 대문자로 출력
        Console.WriteLine("ToLower: "+ strTest.ToLower());  //strTest를 모두 소문자로 출력

        string insert = strTest.Insert(3, "ing");   //4번째 위치에 ing 붙여주는거 
        Console.WriteLine("insert: " + insert);      //stringTest 출력

        Console.WriteLine("strTest Length: " + strTest.Length); //문자열 길이 출력 7

        string replace = strTest.Replace("Test", "Example"); //기존의 문자열을 바꿔주는 기능
        Console.WriteLine("replace: " + replace);   //strExample 출력

        string exam = " Example ";
        Console.WriteLine("exam: " + exam);
        string trim = exam.Trim();      //exam의 값 Example의 앞뒤 공백을 없애주는 역할.
        Console.WriteLine("trim: " + trim); //" Example " -> "Example"
        char[] trimChars = { 'E', 'l' };    //trimChars는 앞뒤 끝에 그 문자가 있으면 없애주는 역할.
        Console.WriteLine("trim with Chars: " + trim.Trim(trimChars));  //Example에서 E는 삭제 l은 중간에 있어서 보존 출력

        Console.WriteLine("IndexOf: " + strTest.IndexOf('r'));  //해당 문자열에 r이 해당되는 요소가 몇 번째인지 출력. 2 ;

        Console.WriteLine("Constains: " + strTest.Contains("rTe")); //해당 문자열에 rTe가 포함되어있으면 True 아니면 False;

        Console.WriteLine("Remove: " + strTest.Remove(1, 3));   //해당 문자열에 1번 ~ 3번 인덱스 삭제. 2번째 ~ 4번째 요소 삭제. sest

        string splitTest = "kim,lee,pack,choi";
        string[] splitList = splitTest.Split(',');  //위의 문자열을 , 쉼표 기준으로 나눠줌
        foreach (string str in splitList)   //데이터 기반 반복문
            Console.WriteLine(str); //kim \n lee \n pack \n choi 출력
    }
}

<문자열에 사용하는 기능>

  • 문자열은 using System.Text; 를 사용합니다.
  • ToUpper: 해당 문자열을 모두 대문자로 출력
  • ToLower: 해당 문자열을 모두 소문자로 출력
  • Insert: 해당 문자열의 특정 순서에 다른 값을 추가
  • replace: 해당 문자열의 특정 값을 다른 값으로 변경
  • trim: 해당 문자열의 앞뒤 공백을 삭제하는 기능
  • trimChars: 해당 문자열의 앞뒤에 특정 값이 들어가있을 경우 그것을 삭제
  • IndexOf: 특정 값이 몇 번째 요소에 있는지 알기위한 기능
  • Constains: 특정 값이 해당 문자열에 포함되어있을 경우 True 없을 시 False
  • Remove: 해당 문자열에서 특정 범위의 요소값들 삭제
  • splitList: 해당 문자열에서 특정 값을 기준으로 요소로 나누는 기능
Console.WriteLine("String" + 1 + "Test" + 3.14F); // 출력문에서 문자열이 앞에 나오면 문자열 기준으로 + 기능, 
Console.WriteLine("Size: " + sizeof(int) + sizeof(float));  //아래와 출력문 다름. Size: 44
Console.WriteLine(sizeof(int) + sizeof(float) + " bytes");  //위와 출력문 다름. 8 bytes
int val = 10;
Console.WriteLine(val.GetType());   //어떤 자료형인지 System.Int32
Console.WriteLine(val.ToString().GetType());  //System.String

Console.WriteLine("Compare: " + (strTest == strChar));  //비교 연산자 ==을 사용하여 두 문자열이 같은지 확인 Compare: False 출력

<문자열 '+' 기능>

  • C#은 출력문의 순서에 따라 기능이 달라집니다.
  • "String"이 먼저 들어간 후 +는 문자열에 추가해주는 기능
  • String1Test3.14F가 출력
  • 마찬가지로 Size: 4(sizeof(int)) + 4(sizeof(float))이며 4가 문자열 취급이니 Size: 44
  • 3번째 코드 sizeof가 먼저 들어간 건 연산자 역할을 수행
  • 8 bytes 출력
  • GetType()는 val이 어떤 자료형인지 표시
  • 비교연산자 ==는 비교하는 두 개가 같으면 True 다르면 False
 string newStr1 = new string("New");
 string newStr2 = new string("New");
 Console.WriteLine("newStr1 == newStr2: " + (newStr1 == newStr2));   //비교
 Console.WriteLine("newStr1.Compare(newStr2): " + newStr1.CompareTo(newStr2));   //비교 서로 같은 위치의 문자열이 다른 것이 있는지 출력
 Console.WriteLine("object.ReferenceEquals: " + object.ReferenceEquals(newStr1, newStr2));   //False 동적할당
 Console.WriteLine("object.Equals: " + newStr1.Equals(newStr2)); //문자열이 같은지 비교

 Console.WriteLine();

 //String Constant Pool  //문자열 상수만 들어가있는 풀
 //문자열은 다른 자료형에 비해 데이터를 많이 먹음. (오디오 소스, 비디오 제외) 순수 코드
 string constStr1 = "Const";
 string constStr2 = "Const";
 Console.WriteLine("constStr1 == constStr2: " + (constStr1 == constStr2));
 Console.WriteLine("constStr1.CompareTo(constStr2)" + constStr1.CompareTo(constStr2));
 Console.WriteLine("object.ReferenceEquals: " + object.ReferenceEquals(constStr1, constStr2));   //True 리터럴 상수
 Console.WriteLine("object.Equals: " + constStr1.Equals(constStr2));

<비교연산자>

  • == : 두 값이 같으면 True, 아니면 False
  • CompareTo는 비교하는 문자열 두 개가 같은 위치에 같은 값이 있는 비교
  • object.ReferenceEquals는 두 객체가 동일한 메모리 위치를 참조하는지 확인합니다.
  • newStr1, 2는 new를 통해 각각 동적 할당으로 다른 메모리 위치를 참조합니다.
  • constStr1, 2는 문자열 리터럴로 C#에서는 동일한 문자열을 가지면 동일한 메모리 위치를 참조하도록 최적화합니다.
  • Equals는 문자열이 서로 같은지 비교
string alphabat = "A" + "B" + "C" + "D"; //문자열을 직접 이어붙이는 방식
//이러면 각 문자열 연결마다 새로운 문자열 객체가 생성됨.
//이러면 가비지 컬렉션의 대상이됨.

System.Text.StringBuilder sb= new StringBuilder();
//StringBuilder sb = new StringBuilder();
sb.Append("This ");
sb.Append("is ");
sb.Append("String ");
sb.Append("Builder ");
Console.WriteLine(sb.ToString());
Char[] chars = alphabat.ToCharArray();

int val1 = 10, val2 = 20;
string strFormat = string.Format("val1: {0}, val2: {1}", val1, val2);
//String Interplation (문자열 보간)
string strInter = $"val1: {val1}, val2: {val2}";

string strTemp = "This is \"C Charp\"!";

string strTmp = "C:\\My\\Project";
string strTemp2 = @"C:\My\Project";

<문자열 추가 기능>

  • 가비지 컬렉션이란? 프로그램에서 유효하지 않은 메모리를 가비지(Garbage)라 표현하고 C언어에서는 free() 함수로 직접 메모리를 해제해주어야하는데, C#에서는 가비지 컬렉터가 불필요한 메모리를 알아서 정리해줍니다. 가비지 컬렉션은 가비지(Garbage)에 쌓일 메모리라고 생각하시면 됩니다.
  • 문자열에서 "A" + "B" + "C" + "D"; 직접 이어붙이는 방식으로 +할때마다 그에 따른 문자열 객체(object)가 생성되어 가비지 컬렉션의 대상이 되며 불필요한 가비지(Garbage)가 됩니다.
  • 이처럼 문자열 연결에 사용하는 함수인 'StringBuilder'가 있습니다.
  • 코드에 따라 This is String Builder가 출력됩니다.
  • strFormat은 문자열 포맷팅으로 포맷 문자열에 변수를 삽입할 때 사용
  • 문자열 보간(String InterPlation)이란 변수 값을 문자열 내에 직접 삽입할  수 있습니다. $를 붙여 사용합니다.

'프로그래밍 C#언어' 카테고리의 다른 글

상속2  (5) 2024.09.05
상속 (Inheritance)  (0) 2024.08.30
구조체 (Structure)  (1) 2024.08.29
배열 (Array)  (0) 2024.08.29
DataType(데이터 타입)  (3) 2024.08.28