티스토리 뷰

반응형

Split 메소드는 많은 종류의 언어에서 사용하고 있는 메소드(또는 함수)이다.

아마 많이들 접해봤기 때문에 생소하지 않을거라고 생각하는데

사용방법을 알면 편하게 쓸 수 있는 Split메소드에 대해서 정리해 보려고 한다.

Split이라고 하면 우선 사전적인 의미로는 "분할", "나누다", "가르다"

정도로 해석이 가능한데 여기에서도 바로 알 수 있듯

문자열을 특정한 조건에 맞게 분류하는 역할을 하는 게 Split메소드이다.

여기에서 특정한 조건이라함은

반복적으로(공통적으로) 사용되는 공백, 문자(특수문자 포함) 등을 말한다.

그리고 본인이 엑셀을 자주 사용하는 있다~! 라고 한다면 감이 오겠지만

CSV(쉼표로 구분된 값)파일과 같은 형식과 유사하다고 생각하면 된다.

하지만..!

그냥 말로 설명하면 감이 잘 안올 수도 있으니

마이크로 소프트의 도큐먼트 사이트의 예제를 예로 들어 정리해 보도록 하자.


1. 한가지 종류의 공통 어구를 사용해서 문자열을 배열로 분류

가장 기본적인 형태의 split사용법이다.

Split의 반환형은 string이기 때문에 split의 결과를 string형의 배열변수 words에 저장하고

foreach문을 이용해서 배열의 처음부터 끝까지 읽어오며 콘솔에 뿌려주도록 하고있다.

string phrase = "The quick brown fox jumps over the lazy dog.";
string[] words = phrase.Split(' ');
foreach (var word in words)
{
    System.Console.WriteLine($"<{word}>");
} 

위 코드에서는 공백문자를 사용해서 문자열을 분류하고 배열에 저장하고 있다.

---결과---

<the>

<quick>

<brown>

<fox>

<jumps>

<over>

<the>

<lazy>

<dog.>

그렇다면 공백문자가 연속으로 있는 경우는 어떻게 인식할까?

다음 코드로 확인해보자.

string phrase = "The quick brown    fox     jumps over the lazy dog.";
string[] words = phrase.Split(' ');
foreach (var word in words)
{
    System.Console.WriteLine($"<{word}>");
}

"The quick brown fox jumps over the lazy dog."

란 문구에서 중간중간에 공백을 추가해서

"The quick brown fox jumps over the lazy dog."

로 변경해서 테스트 해 보면 결과는 다음과 같다.

---결과---

<The>

<quick>

<brown>

<>

<>

<>

<fox>

<>

<>

<>

<>

<jumps>

<over>

<the>

<lazy>

<dog.>


확인 결과,

공백도 역시 구분문자로 인식을 해서 배열에 빈 문자열로 저장된다는 것을 확인할 수 있다.


2. 한가지 이상의 공통 어구를 사용해서 문자열을 배열로 분류

Split 메소드의 구분 인자값은 하나만 사용할 수 있는 게 아니라

여러가지 문자를 사용할 수가 있는데

다음과 같은 예제코드를 사용해서 확인이 가능하다.

char[] delimiterChars = { ' ', ',', '.', ':', '\t' };
string text = "one\ttwo three:four,five six seven";
System.Console.WriteLine($"Original text: '{text}'");

string[] words = text.Split(delimiterChars);
System.Console.WriteLine($"{words.Length} words in text:");

foreach (var word in words)
{
    System.Console.WriteLine($"<{word}>");
}

delimiterChar란 이름의 배열을 선언하고

"공백, 쉼표, 마침표, 콜론, 탭"을

split의 구분자로 사용하기 위해 값을 할당했다.

즉, split의 인자값은 char형의 배열형태라는 것인데

처음 공백을 사용한 코드에서는

Split(' ') 처럼 사용했으나

원래 Split은 VS의 도움말 처럼

인자값의 기본은 char 배열 형태기 때문에 

delimiterChar 배열을 Split 메소드의 인자값으로 사용할 수가 있는것이다.

그리고 "$" 키워드가 좀 생소할 수도 있는데

이게 뭔지 잠깐 설명을 하고 넘어가자면,

"문자열 보간"이라고 하는 것인데... "보간"... 이라는 말 자체가 생소하기도 하니까...

쉽게 예를 들어 보겠다.

문자열 사이에 변수를 사용하는 경우 몇 가지 표현식이 있을 수 있다.

보통 문자열을 쌍따옴표 " " 로 묶어서 구분을 하는데

"$" 키워드를 문자열 앞에 사용하게 되고 중괄호 부호 { } 사이에 변수 또는 식을 넣으면

쌍따옴표 사이에 들어가더라도 문자열이 아니라 변수나 식으로 인식하게 된다.

(※ $ 나 "" 사이에 공백이 들어가게되면 런타임 오류가 발생하기때문에 주의할 것.)

다음 코드는 모두 같은 결과값을 출력하게 된다.

System.Console.WriteLine("<{0}>", word);

System.Console.WriteLine("<" + word + ">");

System.Console.WriteLine($"<{word}>");

즉, "$" 키워드를 사용하게 되면 더욱 간결하게 코드를 작성하는 것이 가능하다고 할 수있다.

음...... 설명하다보니.... 핀트가 조금 엇나가긴 했는데...

어쨌든

Spllit의 인자값은 배열의 형태로 복수의 구분자를 사용할 수 있으며 위 예제에 대한 결과는 다음과 같다.

---결과---

Original text: 'one two three:four,five six seven'

7 words in text:

<one>

<two>

<three>

<four>

<five>

<six>

<seven>

그렇다면 다음코드와 같이

연속적인 구분자 코드가 있을 경우에는 어떻게 될까?

char[] delimiterChars = { ' ', ',', '.', ':', '\t' };
string text = "one\ttwo :,five six seven";
System.Console.WriteLine($"Original text: '{text}'");

string[] words = text.Split(delimiterChars);
System.Console.WriteLine($"{words.Length} words in text:");

foreach (var word in words)
{
    System.Console.WriteLine($"<{word}>");
}

다음과 같이 빈 문자열을 반환하게 되어있다.

Original text: 'one two :,five six seven'

7 words in text:

<one>

<two>

<>

<>

<five>

<six>

<seven>




추가) 연속적인 구분자 코드로 빈 문자열이 반환되었을 때 제거하는 방법

위에서 설명한 Split 사용예 중에서 빈 문자열을 반환하는 경우가 있었는데

만약 배열의 빈문자열이 있을 경우에는  StringSplitOptions.RemoveEmptyEntries 를 사용해서 빈 문자열을 제거할 수 있다.

RemoveEmptyEntries에 대해서는 다음기회에 더 자세히 소개할 수 있다면 해보도록 하고...

이번에도 설명하다보니... 분량조절에 실패한 것 같은 느낌이 강하게 들어서...

짧게 코드와 결과값만 정리하고 이번편은 마치도록 하겠다.

string[] separatingChars = { "=", "..." };  
string text = "one==two......three=four";  
System.Console.WriteLine("Original text: '{0}'", text);  

string[] words = text.Split(separatingChars, System.StringSplitOptions.RemoveEmptyEntries );  
System.Console.WriteLine("{0} substrings in text:", words.Length);  

foreach (var word in words)
{
    System.Console.WriteLine(word);
}

---결과---

Original text: 'one==two......three=four'

3 substrings in text:

one

two

three=four

끝~~!!!



반응형
댓글
반응형
05-19 00:16
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함