[C#] String.Split() 의 separator 유지하는 함수
카테고리: CSharp
태그: String
업무 중 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> 같은 형태로 반환하는 것이 성능에 좋음
💻 열심히 공부해서 작성 중이니 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 알려주시면 감사하겠습니다! 😸
댓글 남기기