티스토리 뷰

반응형

복수문자 파싱

string 문자열을 특정한 구분자로 분리(파싱)해야하는 경우가 빈번하게 발생한다. 예를 들어 "강아지, 고양이, 독수리, 코끼리, 기린" 이라는 문자를 string으로 받았는데 string에 있는 동물의 종수를 알아야 한다거나, 아니면 한줄씩 화면에 출력해야 하는 경우 등 다양한 경우가 있을 수 있다. 이럴 경우 편하게 사용할 수 있는 함수가 split 이다. split을 사용하면 특정 문자를 기준으로 string에 입력된 문자를 배열로 변환할 수 있다. 변환할 배열의 타입을 list로 받을 수도 있고 string[] 로 받아도 된다. 

 

 

 


 

콤마로만 구분이 가능한 string -> list 변환 예제

// 동물을 콤마 기준으로 입력
string animals = "강아지, 고양이, 독수리, 코끼리, 기린";
List<string> animalsSplit = animals.Split(',').ToList<string>(); // 콤마 기준으로 분리해서 list에 입력

// 리스트에 입력된 문자를 순차 출력
foreach (string animal in animalsSplit)
{
    Console.WriteLine(animal);
    // 아래 내용을 순차 출력
    // 강아지
    // 고양이
    // 독수리
    // 코끼리
    // 기린
}

주석 때문에 조금 코드가 길어졌지만 실제로 string -> 리스트에 입력하는건 아래 구문 한줄이면 된다.

List<string> animalsSplit = animals.Split(',').ToList<string>(); 

 

위에 예제처럼 string 구문이 단순히 콤마 기준으로 나뉘어 진다면 다행이지만 다양한 기호로 구분해야 한다면 다른 방법을 사용해야 한다. 예를 들어 아래 값으로 string animals 값에 입력된 동물을 ", ; / -" 등으로 구분해야 할 수도 있다.

string animals = "강아지, 고양이; 독수리/ 코끼리- 기린";

실제로 실무를 보다보면 다양한 방법으로 파싱해야하는 경우가 발생하기 때문에 복수의 구분자로 split 하는 방법을 자주 사용하게 된다.

 

 

 


 

콤마로만 구분이 가능한 string -> list 변환 예제

// ", ; / -" 등으로 분류된 string 값
string animals = "강아지, 고양이; 독수리/ 코끼리- 기린";

// split(new string[] {"구분자","구분자","구분자"}) -> 복수의 구분자로 배열 변환
// StringSplitOptions.RemoveEmptyEntries -> split한 문자가 공백인 경우 리스트에서 제거
List<string> animalsSplit = animals.Split(new string[] {",", ";", "/", "-"}, 
				StringSplitOptions.RemoveEmptyEntries).ToList<string>(); 

foreach (string animal in animalsSplit)
{
    Console.WriteLine(animal);
    // 정상적으로 배열로 생성되어 원하는 값 출력
    // 강아지
    // 고양이
    // 독수리
    // 코끼리
    // 기린
}

animals를 split할 때 new string[] {"구분자", "구분자", "구분자"} 구문을 넣어서 복수의 구분자로 데이터를 분류해서 배열에 넣을 수 있다. 그리고 뒤에 StringSplitOptions.RemoveEmptyEntries 옵션은 만약 split한 string 구문이 공백인 경우 배열에 넣지 않고 공백으로 처리하는 옵션이다. 공백 데이터는 필요없을 경우 옵션으로 넣어서 사용하면 된다.

 

그리고 만약 중복되는 데이터는 제거하길 원할 경우 Distinct() 함수를 사용해서 제거할 수 있다. 예를 들어 올림픽에 출전한 선수의 출신 국가를 알려달라고할 경우 중복되는 국가를 여러번 알려줄 필요는 없다.

 

한국선수 홍길동

한국선수 손흥민

미국선수 제임스

미국선수 마이크

일본선수 나카타

 

위의 경우라면 올림픽에 출전한 국가는 "한국, 한국, 미국, 미국, 일본" 이라고 하지 않고 "한국, 미국, 일본" 선수가 출전한다라고 한다. 이럴 경우 중복 나라를 제거해주면 된다.

 

 

 


 

string -> list 변환할 때 중복 제거 예제

string animals = "한국,한국,미국,미국,일본";
List<string> animalsSplit = animals.Split(',').ToList<string>();

// 2번째 한국, 4번째 미국 데이터는 중복으로 제거됨
animalsSplit = animalsSplit.Distinct().ToList<string>(); 

foreach (string animal in animalsSplit)
{
    Console.WriteLine(animal);
    // 중복을 제거하고 아래값 출력
    // 한국
    // 미국
    // 일본
}

List.Distinct().ToList<String>();을 사용해서 중복되는 데이터 2번째 한국, 4번째 미국 데이터는 제거되고 한국, 미국, 일본이 각 1회씩만 출력되는 것을 확인할 수 있다. 사용 빈도가 생각보다 많기 때문에 잘 활용하도록 하자.

반응형
댓글
공지사항