Computer Language/C#
[C#] 문자열 자르기 (Substring, Split, Index, Remove, Regex)
HONGGG
2023. 8. 11. 19:31
문자열 자르기
문자열을 자르는 다양한 방법들
문자열을 자르는 방법들은 여러가지가 있다. 하나씩 살펴보자.
Substring
함수명 | String.Substring | |
오버로드 | Substring(Int32) | 지정된 문자 위치에서 문자열 끝까지 잘라내기 |
Substring(Int32, Int32) | 지정된 문자 시작 위치에서 원하는 길이만큼 잘라내기 | |
매개변수 |
시작 위치 | 탐색을 시작할 문자열의 위치값 |
길이 | 탐색 시작 위치로부터 문자열을 가져 올 길이 | |
반환값 | String | 이 인스턴스의 startIndex에서 시작하는 부분 문자열에 해당하는 문자열이거나, Empty가 이 인스턴스의 길이와 같으면 startIndex |
string originalString = "Hello, world!";
string substring1 = originalString.Substring(7); // 시작 인덱스 7부터 끝까지 추출
string substring2 = originalString.Substring(7, 5); // 시작 인덱스 7부터 길이 5만큼 추출
Console.WriteLine(substring1); // 출력: "world!"
Console.WriteLine(substring2); // 출력: "world"
Split
팁
메서드가 Split 구분된 문자열을 부분 문자열로 분리하는 가장 좋은 방법은 아니다. 구분된 문자열의 모든 부분 문자열을 추출하지 않으려거나 구분 기호 문자 집합 대신 패턴에 따라 문자열을 구문 분석하려는 경우 정규식을 사용하거나 문자의 인덱스를 반환하는 검색 메서드 중 하나를 메서드와 Substring 결합하는 것이 좋다.
함수명 | String.Split | 지정된 문자열 또는 유니코드 문자 배열의 요소로 구분된 이 인스턴스의 부분 문자열이 포함된 문자열 배열을 반환 |
오버로드 |
Split(Char[]) | 지정된 구분 문자에 따라 문자열을 부분 문자열로 분할 |
Split(Char, StringSplitOptions) | 지정된 구분 문자 및 옵션(필요에 따라)에 따라 문자열을 부분 문자열로 분할 | |
Split(Char[], Int32) | 지정된 구분 문자에 따라 문자열을 최대 개수의 부분 문자열로 분할 | |
Split(Char[], StringSplitOptions) | 지정된 구분 문자 및 옵션에 따라 문자열을 부분 문자열로 분할 | |
Split(String, StringSplitOptions) | 문자열을 제공된 문자열 구분 기호에 기초하는 부분 문자열로 분할 | |
Split(String[], StringSplitOptions) | 지정된 구분 문자열 및 옵션(필요에 따라)에 따라 문자열을 부분 문자열로 분할 | |
Split(Char, Int32, StringSplitOptions) | 지정된 구분 문자 및 옵션(필요에 따라)에 따라 문자열을 분할 제공된 문자 구분 기호에 따라 문자열을 최대 개수의 부분 문자열로 분할 필요에 따라 결과에서 빈 부분 문자열을 생략 |
|
Split(Char[], Int32, StringSplitOptions) | 지정된 구분 문자 및 옵션(필요에 따라)에 따라 문자열을 최대 개수의 부분 문자열로 분할 | |
Split(String, Int32, StringSplitOptions) | 지정된 구분 문자열 및 옵션(필요에 따라)에 따라 문자열을 최대 개수의 부분 문자열로 분할 | |
Split(String[], Int32, StringSplitOptions) | 지정된 구분 문자열 및 옵션(필요에 따라)에 따라 문자열을 최대 개수의 부분 문자열로 분할 | |
매개변수 |
구분 문자 | 문자열 분할에 사용되는 분할 지점을 정하는 문자 값 |
구분 문자 배열 | 문자열 배열에 포함된 모든 문자를 분할 지점으로 정하는 값 | |
옵션 (StringSplitOptions) | 문자열 분할에 사용될 옵션 값 | |
최대 개수 | 분할할 수 있는 최대 개수 제한 값 | |
반환값 | String |
using System;
public class HelloWorld
{
public static void Main(string[] args)
{
string example = ",ONE,,TWO,,,THREE,,TWO,,THREE";
char charSeparator = ',';
char[] charSeparators = new char[] { ',', ' ' };
string stringSeparator = ",";
string[] stringSeparators = new string[] { ",", "TWO" };;
// public string[] Split (params char[]? separator);
Console.WriteLine("Split(Char[])");
Show(example.Split(charSeparator));
//Split(Char[])
//<><ONE><><TWO><><><THREE><><TWO><><THREE>
Console.WriteLine("");
// public string[] Split (char separator, StringSplitOptions options = System.StringSplitOptions.None);
Console.WriteLine("Split(Char, StringSplitOptions)");
Console.WriteLine("StringSplitOptions.None : ");
Show(example.Split(charSeparator, StringSplitOptions.None));
Console.WriteLine("StringSplitOptions.RemoveEmptyEntries : ");
Show(example.Split(charSeparator, StringSplitOptions.RemoveEmptyEntries));
//Split(Char, StringSplitOptions)
//StringSplitOptions.None :
//<><ONE><><TWO><><><THREE><><TWO><><THREE>
//StringSplitOptions.RemoveEmptyEntries :
//<ONE><TWO><THREE><TWO><THREE>
Console.WriteLine("");
// public string[] Split (char[]? separator, int count);
Console.WriteLine("Split(Char[], Int32)");
Show(example.Split(charSeparators, 3));
//Split(Char[], Int32)
//<><ONE><,TWO,,,THREE,,TWO,,THREE>
Console.WriteLine("");
// public string[] Split (char[]? separator, StringSplitOptions options);
Console.WriteLine("Split(Char[], StringSplitOptions)");
Console.WriteLine("StringSplitOptions.None : ");
Show(example.Split(charSeparators, StringSplitOptions.None));
Console.WriteLine("StringSplitOptions.RemoveEmptyEntries : ");
Show(example.Split(charSeparators, StringSplitOptions.RemoveEmptyEntries));
//Split(Char[], StringSplitOptions)
//StringSplitOptions.None :
//<><ONE><><TWO><><><THREE><><TWO><><THREE>
//StringSplitOptions.RemoveEmptyEntries :
//<ONE><TWO><THREE><TWO><THREE>
Console.WriteLine("");
// public string[] Split (string? separator, StringSplitOptions options = System.StringSplitOptions.None);
Console.WriteLine("Split(String, StringSplitOptions)");
Console.WriteLine("StringSplitOptions.None : ");
Show(example.Split(stringSeparator, StringSplitOptions.None));
Console.WriteLine("StringSplitOptions.RemoveEmptyEntries : ");
Show(example.Split(stringSeparator, StringSplitOptions.RemoveEmptyEntries));
//Split(String, StringSplitOptions)
//StringSplitOptions.None :
//<><ONE><><TWO><><><THREE><><TWO><><THREE>
//StringSplitOptions.RemoveEmptyEntries :
//<ONE><TWO><THREE><TWO><THREE>
Console.WriteLine("");
// public string[] Split (string[]? separator, StringSplitOptions options);
Console.WriteLine("Split(String[], StringSplitOptions)");
Console.WriteLine("StringSplitOptions.None : ");
Show(example.Split(stringSeparators, StringSplitOptions.None));
Console.WriteLine("StringSplitOptions.RemoveEmptyEntries : ");
Show(example.Split(stringSeparators, StringSplitOptions.RemoveEmptyEntries));
//Split(String[], StringSplitOptions)
//StringSplitOptions.None :
//<><ONE><><><><><><THREE><><><><><THREE>
//StringSplitOptions.RemoveEmptyEntries :
//<ONE><THREE><THREE>
Console.WriteLine("");
// public string[] Split (char separator, int count, StringSplitOptions options = System.StringSplitOptions.None);
Console.WriteLine("Split(Char, Int32, StringSplitOptions)");
Console.WriteLine("StringSplitOptions.None : ");
Show(example.Split(charSeparator, 2, StringSplitOptions.None));
Console.WriteLine("StringSplitOptions.RemoveEmptyEntries : ");
Show(example.Split(charSeparator, 2, StringSplitOptions.RemoveEmptyEntries));
//Split(Char, Int32, StringSplitOptions)
//StringSplitOptions.None :
//<><ONE,,TWO,,,THREE,,TWO,,THREE>
//StringSplitOptions.RemoveEmptyEntries :
//<ONE><TWO,,,THREE,,TWO,,THREE>
Console.WriteLine("");
// public string[] Split (char[]? separator, int count, StringSplitOptions options);
Console.WriteLine("Split(Char[], Int32, StringSplitOptions)");
Console.WriteLine("StringSplitOptions.None : ");
Show(example.Split(charSeparators, 2, StringSplitOptions.None));
Console.WriteLine("StringSplitOptions.RemoveEmptyEntries : ");
Show(example.Split(charSeparators, 2, StringSplitOptions.RemoveEmptyEntries));
//Split(Char[], Int32, StringSplitOptions)
//StringSplitOptions.None :
//<><ONE,,TWO,,,THREE,,TWO,,THREE>
//StringSplitOptions.RemoveEmptyEntries :
//<ONE><TWO,,,THREE,,TWO,,THREE>
Console.WriteLine("");
// public string[] Split (string? separator, int count, StringSplitOptions options = System.StringSplitOptions.None);
Console.WriteLine("Split(String, Int32, StringSplitOptions)");
Console.WriteLine("StringSplitOptions.None : ");
Show(example.Split(stringSeparator, 2, StringSplitOptions.None));
Console.WriteLine("StringSplitOptions.RemoveEmptyEntries : ");
Show(example.Split(stringSeparator, 2, StringSplitOptions.RemoveEmptyEntries));
//Split(String, Int32, StringSplitOptions)
//StringSplitOptions.None :
//<><ONE,,TWO,,,THREE,,TWO,,THREE>
//StringSplitOptions.RemoveEmptyEntries :
//<ONE><TWO,,,THREE,,TWO,,THREE>
Console.WriteLine("");
// public string[] Split (string[]? separator, int count, StringSplitOptions options);
Console.WriteLine("Split(String[], Int32, StringSplitOptions)");
Console.WriteLine("StringSplitOptions.None : ");
Show(example.Split(stringSeparators, 2, StringSplitOptions.None));
Console.WriteLine("StringSplitOptions.RemoveEmptyEntries : ");
Show(example.Split(stringSeparators, 2, StringSplitOptions.RemoveEmptyEntries));
//Split(String[], Int32, StringSplitOptions)
//StringSplitOptions.None :
//<><ONE,,TWO,,,THREE,,TWO,,THREE>
//StringSplitOptions.RemoveEmptyEntries :
//<ONE><THREE,,TWO,,THREE>
}
static void Show(string[] entries)
{
foreach (string entry in entries)
Console.Write($"<{entry}>");
Console.Write("\n");
}
}
문자열 인덱싱
문자열 인덱싱은 string의 각 원소를 덧셈 연산자로 붙이는 것이다.
string originalString = "abcdef";
string substring = originalString[1] + originalString[3] + originalString[5]; // 인덱스 1, 3, 5의 문자 추출
Console.WriteLine(substring); // 출력: "bdf"
Remove
함수명 | String.Remove | |
오버로드 |
Remove(Int32) | 지정된 위치부터 끝까지 문자들을 제거하는 함수 |
Remove(Int32, Int32) | 지정된 위치부터 정해진 길이만큼 문자를 제거하는 함수 | |
매개변수 |
시작 위치 | 탐색을 시작할 문자열의 위치값 |
길이 | 탐색 시작 위치로부터 문자열을 가져 올 길이 | |
반환값 | string |
string originalString = "Hello, world!";
string modifiedString = originalString.Remove(7, 5); // 시작 인덱스 7부터 길이 5만큼 삭제
Console.WriteLine(modifiedString); // 출력: "Hello, !"
Regex
System.Text.RegularExpressions 네임스페이스를 사용하여 정규식 패턴을 활용하여 문자열을 자르기
네임스페이스 | System.Text.RegularExpressions | |
어셈블리 | System.Text.RegularExpressions.dll | |
함수명 | Regex | |
생성자 |
Regex() | Regex 클래스의 새 인스턴스를 초기화 |
Regex(SerializationInfo, StreamingContext) | serialize된 데이터를 사용하여 Regex 클래스의 새 인스턴스를 초기화 | |
Regex(String) | 지정된 정규 식에 대해 Regex 클래스의 새 인스턴스를 초기화 | |
Regex(String, RegexOptions) | 패턴을 수정할 수 있는 옵션을 사용하여 Regex 클래스의 새 인스턴스를 지정된 정규식에 대해 초기화 | |
Regex(String, RegexOptions, TimeSpan) | 시간이 초과되기 전에 패턴 일치 메서드가 일치하도록 시도해야 하는 시간을 지정한 패턴과 값을 수정할 수 있는 옵션을 사용하여 Regex 클래스의 새 인스턴스를 지정된 정규식에 대해 초기화하고 컴파일 |
using System;
using System.Text.RegularExpressions;
public class HelloWorld
{
public static void Main(string[] args)
{
// Ex1. 첫 매치 문자열 출력
Console.WriteLine("First Match : ");
string str = "Hello, World! Welcome to C# Regex example. Hello, to you too Java!";
Regex regex1 = new Regex("Hello");
Match m1 = regex1.Match(str);
if (m1.Success)
{
Console.WriteLine("{0}:{1}", m1.Index, m1.Value);
}
//First Match :
//0:Hello
Console.WriteLine("\n");
// Ex2. 매치된 문자열 계속 출력
Console.WriteLine("Continue printing after match : ");
Regex regex2 = new Regex("Hello");
Match m2 = regex2.Match(str);
while (m2.Success)
{
Console.WriteLine("{0}:{1}", m2.Index, m2.Value);
m2 = m2.NextMatch();
}
//Continue printing after match :
//0:Hello
//43:Hello
Console.WriteLine("\n");
// Ex3. Matches() 메서드
Console.WriteLine("Matches() Method : ");
Regex regex3 = new Regex("Hello");
MatchCollection mc = regex3.Matches(str);
foreach (Match m3 in mc)
{
Console.WriteLine("{0}:{1}", m3.Index, m3.Value);
}
//Matches() Method :
//0:Hello
//43:Hello
}
}