본문 바로가기

.NET/C#

[C#] 문자열 01 - Split()으로 문자열 분할하기

string 클래스의 멤버 메서드인 Split()은 특정 문자를 기준으로 문자열을 분할해준다.

Split()의 인자로 분할의 기준이 될 문자 혹은 문자열을 Separator(분리 기호)로 지정할 수 있다.

메서드의 결과물은 string[]으로, 분리 기호를 기준으로 분할된 부분 문자열들이 포함된 배열이다.

 

사용 예1

var result1 = "apple.banana,tomato".Split('.', ',');
// result1 = ["apple", "banana", "tomato"]

var result2 = "apple.banana,tomato".Split('.');
// result2 = ["apple", "banana,tomato"]

var result3 = "apple.banana.tomato".Split(',');
// result3 = ["apple.banana.tomato"]

사용 예2

// 텍스트 파일의 내용을 줄 단위로 찢어서 사용하기
using (var sr = new StreamReader("test.txt"))
{
	var lines = sr.ReadToEnd().Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
    
    foreach(var line in lines)
    {
    	Console.WriteLine(line);
    }
}

 

개행(줄바꿈)에 사용되는 개행 문자는 '\r'(Carriage Return, 캐리지 리턴)과 '\n'(Line Feed)이 있는데, 운영체제에 따라 사용되는 방식이 다르다.  윈도우 환경에서는 '\r\n'이, 리눅스나 유닉스 등은 '\n'이 개행 문자로 사용된다. 따라서 개행 문자를 기준으로 문자열을 분할하고자 할 때는 문자를 직접 지정하기보다는 Environment.NewLine 속성을 사용하여 분할하는 것이 좋다. Environment.NewLine은 현재 환경에서 사용되는 개행 문자를 문자열로 반환해주는 속성이기 때문에 string.ToCharArray() 메서드를 사용해서 문자 배열로 변환하여 인자로 넘겨줘야 한다.

StringSplitOptions은 Split()에 지정할 수 있는 분할 옵션으로, StringSplitOptions.None (지정 안 함), StringSplitOptions.RemoveEmptyEntries(빈 문자열 제거), StringSplitOptions.TrimEntries(분할된 문자열들의 앞/뒤에서 공백 제거 - .NET 5 부터 지원)이 있다. .NET Framework에서 사용할 수 있는 옵션은 StringSplitOptions.RemoveEmptyEntries 뿐이므로, 분리 기호를 기준으로 문자열을 분할한 결과물에서 빈 문자열들을 제거하고자 할 때만 지정하면 된다.

var str = "test1.test2..test3.test4";

var result1 = str.Split('.');
// result1 = ["test1", "test2", "", "test3", "test4"]

var result2 = str.Split(new char[1]{'.'}, StringSplitOptions.RemoveEmptyEntries);
// result2 = ["test1", "test2", "test3", "test4"]