//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 |