[C#] String.Split() 의 separator 유지하는 함수

Date:     Updated:

카테고리:

태그:

업무 중 String.Split()에서 sepatator를 유지해야 하는 필요성을 느껴 작성한 함수 코드 글입니다.

코드

public static string[] SplitAndKeepSeparator(this string input, params char[] separator)
{
    List<string> parts = new List<string>();
 
    int currentIndex = 0;
    int separatorIndex;
 
    while ((separatorIndex = input.IndexOfAny(separator, currentIndex)) >= 0)
    {
        if (separatorIndex > currentIndex)
        parts.Add(input.Substring(currentIndex, separatorIndex - currentIndex));
 
        parts.Add(input.Substring(separatorIndex, 1));
        currentIndex = separatorIndex + 1;
    }
 
    if (currentIndex < input.Length)
        parts.Add(input.Substring(currentIndex));
 
    return parts.ToArray();
}
  • 확장 메소드로 만들었음
  • Util함수로 만들어도 상관 없음

최적화적인 측면

  • 기존 Split은 배열을 반환하기 때문에 통일성 같은 느낌으로 확장 메소드도 배열을 반환하도록 만들었음
  • List를 배열로 만드는 과정에서 새로운 배열을 할당 및 요소 복사를 하기에 성능에 좋지 않음
  • 그래서 꼭 반환되는 타입이 배열일 필요가 없으면 List<string>로 반환하거나 IEnumerable<string> 같은 형태로 반환하는 것이 성능에 좋음


💻 열심히 공부해서 작성 중이니 오류나 틀린 부분이 있을 경우 
  언제든지 댓글 혹은 메일로 알려주시면 감사하겠습니다! 😸

맨 위로 이동하기

CSharp 카테고리 내 다른 글 보러가기

댓글 남기기