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
'C# > 문법 정리' 카테고리의 다른 글
C# - String.Split() 메소드 (0) | 2024.07.08 |
---|---|
C# - 정적 메소드(static method) (0) | 2024.07.07 |
C# - 증가 연산자(increment operator), 감소 연산자(decrement operator) (0) | 2024.07.05 |
C# - 대입 연산자(assignment operator) (0) | 2024.07.04 |
C# - 조건 연산자(conditional operator) (0) | 2024.07.03 |