본문 바로가기
C#

[C#] string

by DANEW 2023. 6. 25.

string (System.String)

 

String Class (System)

Represents text as a sequence of UTF-16 code units.

learn.microsoft.com

[System.Runtime.InteropServices.ComVisible(true)] public sealed class String : ICloneable, IComparable, IComparable<string>, IConvertible, IEquatable<string>, System.Collections.Generic.IEnumerable<char>

문자로의 변환
- ToCharArray
 
문자열 생성
- 생성자
 
널과 빈 문자열
- Empty, Length, IsNullOrEmpty
- null이 배정된 문자열은 빈 문자열("", 길이 0)과는 다르다.
 
문자열 안의 문자에 접근
- 인덱서
- IEnumerable<char>를 지원하기 때문에 foreach의 사용이 가능
 
문자열 내부 검색
- EndsWith, StartWith, Contain, IndexOf, LastIndexOf, IndexOfAny, LastIndexOfAny
- StringComparison을 통해 서수/문화권 감지 설정, 대소문자 구별 설정을 할 수 있다.
- 기본값: 현재 문화권, 대소문자 구분
 
문자열 조작
- Substring, Insert, Remove, PadLeft, PadRight, TrimStart, TrimEnd, Trim, Replace
- ToUpper, ToUpperInvariant, ToLower, ToLowerInvariant
 
문자열의 분할과 결합
- Split, Join, Concat, operator+
 
String.Format과 복합 서식 문자열
- Format (ToString을 호출하여 값 얻음)
- 복합 서실 문자열 - 문자열 내에 {0}와 같은 식으로 변수가 들어갈 위치를 지정
 
서수 비교와 문화권 감지 비교
- 서수 비교: 유니코드 부호 수치 값에 따라 비교 (AB...YZ...ab...yz)
- 문화권 감지 비교 (AaBb...YyZz)
* 현재 문화권: 최종 사용자가 선택한 설정(제어판)
* 불변 문화권: 모든 컴퓨터가 동일, 북미 문화에 가까움
 
문자열 상등 비교
- Equals, operator==
- 서수 비교, 대소문자 구분
 
문자열 순서 비교

- CompareTo, Compare, CompareOrdinal

- 현재 문화권, 대소문자 구분

 

// 문자열 생성

// new string(char, count): 문자를 count번 찍은 문자열 생성

// new string(char[]), new string(char*)도 가능하다.

string si = "Heroes of the Storm";

 

// 널과 빈 문자열

반응형

// si가 공백 문자열이면 true, 아니면 false

Console.WriteLine(si == "");

Console.WriteLine(si == string.Empty); 

Console.WriteLine(si.Length == 0);

Console.WriteLine();

 

// si null이면 true, 아니면 false

Console.WriteLine(si == null);  // null 판정은 이 방법 뿐

Console.WriteLine();

 

// si가 공백 문자열이거나 null이면 true

Console.WriteLine(string.IsNullOrEmpty(si));

Console.WriteLine();

 

// 문자열 안의 문자에 접근

 

// si 2번째 색인 위치에 접근

Console.WriteLine(si[2]);

 

// si의 모든 문자에 접근

foreach (char c in si)

{

    Console.Write(c);

}

Console.WriteLine('\n');

 

// 문자열 내부 검색

 

// 기본값: 문화권 감지(현재 문화권), 대소문자 구분

string str = "heroes";

 

// si str로 시작하면 true

Console.WriteLine(si.StartsWith(str));

 

// si str로 끝나면 true

Console.WriteLine(si.EndsWith(str));

 

// si str을 포함하면 true

Console.WriteLine(si.Contains(str));

 

// si str을 포함하면 해당 인덱스를, 없다면 -1 반환

Console.WriteLine(si.IndexOf(str));

 

// IndexOf와 같지만 뒤에서 앞으로 검색함

Console.WriteLine(si.LastIndexOf(str));

 

Console.WriteLine();

 

// Contains는 옵션 지정이 불가능 함

// StartsWith, 문화권 감지(문화권 불변), 대소문자 구분 무시

Console.WriteLine(si.StartsWith(str, StringComparison.InvariantCultureIgnoreCase));

 

// IndexOf, 10번째 인덱스부터, 문화권 감지(현재 문화권), 대소문자 구분 무시

Console.WriteLine(si.IndexOf(str, 10, StringComparison.CurrentCultureIgnoreCase));

 

Console.WriteLine();

 

// 문자열에서 문자 검색

string charset = "op";

 

// si charset에서 포함하는 문자가 있다면 인덱스를 반환

Console.WriteLine(si.IndexOfAny(charset.ToCharArray()));

 

// IndexOf와 같지만 뒤에서 앞으로 검색함

Console.WriteLine(si.LastIndexOfAny(charset.ToCharArray()));

 

Console.WriteLine();

 

// 문자열 조작

 

// string은 불변이 객체이므로 문자열을 조작하는 것은 새로운 스트링 인스턴스를 생성하는 것임

 

// 문자열 잘라내기

Console.WriteLine(si.Substring(0, 5));

Console.WriteLine(si.Substring(3, 5));

Console.WriteLine(si.Substring(3));

 

Console.WriteLine();

 

// 문자열 삽입

Console.WriteLine(si.Insert(5, "___HI!_I'M_HERE!___"));

 

// 문자열 제거

Console.WriteLine(si.Remove(5, 10));

 

Console.WriteLine();

 

// 문자열을 길이에 맞추기 - 만약 주어진 문자열이 더 길면 변화 없음

Console.WriteLine(si.PadLeft(50));          // 왼쪽을 채워서 길이에 맞춤, 기본값은 빈칸

Console.WriteLine(si.PadLeft(50, '_'));     // 왼쪽, '_'으로 채움

Console.WriteLine(si.PadRight(50, '-'));    // 오른쪽, '_'으로 채움

 

Console.WriteLine();

 

// 문자열에서 지정된 문자 지우기 (기본값은 공백 문자(빈칸, , 개행 등)의 제거)

string trimStr = "  a b c \t\r\n  ";

Console.WriteLine("[{0}]", trimStr.TrimStart());    // 앞쪽만

Console.WriteLine("[{0}]", trimStr.TrimEnd());      // 뒤쪽만

Console.WriteLine("[{0}]", trimStr.Trim());         // 양쪽 모두

 

Console.WriteLine();

 

// 문자열에서 지정된 문자 대체하기

Console.WriteLine(si.Replace(" ", "__"));

Console.WriteLine(si.Replace(" ", ""));

 

Console.WriteLine();

 

// 문자열의 분할과 결합

string[] splitedWords = si.Split();

 

foreach (var item in splitedWords)

{

    Console.Write("{0}_", item);

}

Console.WriteLine();

 

// 결합(구분자 적용)

Console.WriteLine(string.Join("+", splitedWords));

 

// 결합(구분자 미적용, operator+와 같음)

Console.WriteLine(string.Concat(splitedWords));

 

Console.WriteLine();

 

// String.Format과 복합 서식 문자열(composite format string)

string composite = "It's {0} degrees in {1} on this {2} morning";

Console.WriteLine(composite, 35, "Perth", DateTime.Now.DayOfWeek);

 

// 보간된 문자열을 통한 출력

Console.WriteLine($"It's hot this {DateTime.Now.DayOfWeek} morning");

 

// 서식 항목 (쉼표와 최소 너비 수치, 콜론과 서식 문자열)

composite = "Name = {0, -20} Credit Limit = {1, 15:C}";

Console.WriteLine(string.Format(composite, "Genji", 5000));

// == Console.WriteLine(composite, "Genji", 5000);

Console.WriteLine(string.Format(composite, "Hanjo", 200000));

// == Console.WriteLine(composite, "Hanjo", 200000);

 

Console.WriteLine();

 

// 문자열 상등 비교

 

// 기본값: 서수 비교, 대소문자 구분

Console.WriteLine(charset == str);

 

// 서수 비교, 대소문자 구별 무시

Console.WriteLine(string.Equals("foo", "FOO", StringComparison.OrdinalIgnoreCase));

 

Console.WriteLine();

 

 

// 문자열 순서 비교

// 기본값: 문화권 감지, 대소문자 구분

// 앞 문자열이 뒷 문자열보다 빠르면 -1, 같으면 0, 늦으면 1

Console.WriteLine("Boston".CompareTo("Austin"));

Console.WriteLine("Boston".CompareTo("Boston"));

Console.WriteLine("Boston".CompareTo("Chicago"));

Console.WriteLine("Boston".CompareTo("BOSTON"));

 

// 대소문자 구분 없음

Console.WriteLine(string.Compare("Boston", "BOSTON", true));

반응형

'C#' 카테고리의 다른 글

[C#] TimeZoneInfo  (1) 2023.08.11
[C#] TimeZone  (1) 2023.08.10
[C#] DateTime & DateTimeOffset  (0) 2023.07.06
[C#] TimeZoneInfo  (2) 2023.07.05
[C#] TimeZone  (1) 2023.07.04
[C#] TimeSpan  (1) 2023.07.01
[C#] Encoding  (1) 2023.06.30
[C#] StringBuilder  (0) 2023.06.27