원문 : C# Join String Method



C# Join String Method



C# 을 사용하면서 문자열을 결합할 때 많은 방법이 있을 수 있지만 String.Join 정적 메소드를 이용하면 편리하게 문자열을 결합할 수 있다. 문자열을 결할할 때 문자열과 문자열 사이의 구분 문자를 임의로 정할 수 있다.

문자열을 결합하는 방법으로 StringBuilder 클래스를 이용하는 방법도 있는데 String.Join 메소드를 사용하는 방법이 더 퍼로먼스가 좋다고 한다. (직접 확인해 보지는 못했지만..)




Using string.Join

string.Join 메소드는 array 또는 List 컬렉션을 이용하여 구분 문자로 구분된 결합된 문자열을 string 객체로 반환한다.

using System;

namespace StringJoin
{
    internal class Program
    {
        public static void Main(string[] args)
        {
            string[] arr = { "one", "two", "three" };

            Console.WriteLine(string.Join(",", arr)); // "string" can be lowercase, or
            Console.WriteLine(String.Join(",", arr)); // "String" can be uppercase            
        }
    }
}



원문 포스트의 예제를 그대로 코딩해보았다. 출력 결과를 보니 구분자를 이용하여 잘 결합된 문자열을 얻었다.
주석에 보면 string.Join 과 String.Join 이 있는데 둘의 차이점은 다들 알고 있겠지?!
String 은 BCL 이고 string 은 C# 에서 String 에 별칭을 부여한 것이다. C# 에서 별칭된 것이 있다면 그것을 사용하라고 배운 것 같다.


How string.Join is different from appending

string.Join 은 appending 과 어떻게 다를까??
string.Join 은 문자열과 문자열을 결합할 때 구분 문자를 문자열 사이에만 삽입하는데 반해, StringBuilder 의 appending 메소드는 문자열과 문자열 사이 뿐만 아니라 마지막 문자열 끝에도 구분 문자를 삽입한다. 이건 기본적인 동작이 그렇다기 보다 appending 으로 간단하게 문자열을 결합할 때 그렇게 된다는 소리다. 따라서 마지막에 추가된 구분 문자를 제거하는 코드를 따로 넣어 주게 된다.

internal class Program
{
        static void Main()
        {
            string[] catSpecies = { "Aegean", "Birman", "Main Coon", "Nebulung" };
            Console.WriteLine(CombineA(catSpecies));
            Console.WriteLine(CombineB(catSpecies));
        }

        /// <summary>
        /// Combine strings with commas.
        /// </summary>
        static string CombineA(string[] arr)
        {
            return string.Join(",", arr);
        }

        /// <summary>
        /// Combine strings with commas.
        /// </summary>
        static string CombineB(string[] arr)
        {
            StringBuilder builder = new StringBuilder();
            foreach (string s in arr)
            {
                builder.Append(s).Append(",");
            }
            return builder.ToString().TrimEnd(new char[] { ',' });
        }
    }



string.Join 메소드를 사용한 코드는 이제 익숙하고.. 만약 StringBuilder 의 Appending 으로 문자열을 결합한다면 위와 같은 코드를 사용하게 된다. 반복문에서 구분 문자열을 더하기 때문에 마지막에 추가된 구분 문자를 제거한다. 보이는 것과 같이 string.Join 메소드를 사용하는게 코드도 깔끔하다.


string.Join exception

string.Join 메소드에서 발생할 수 있는 예외는 3가지 이다.



ArgumentNullException
ArgumentOutOfRangeException
OutOfMemoryException

처음 두개의 예외는 코딩하면서 발생할 가능성이 많으므로 예외 처리를 해두어야 한다.


Using string.Join on List

실제 업무에서 string[] 보다는 List<string> 컬렉션을 자주 사용하게 된다.

static void Main()
{
        // List of cities
        List<string> cities = new List<string>();
        cities.Add("New York");
        cities.Add("Mumbai");
        cities.Add("Berlin");
        cities.Add("Istanbul");

        // Join strings into one CSV line
        string line = string.Join(",", cities.ToArray());
        Console.WriteLine(line);
}



cf) C# 4.0 에서는 string.Join 메소드가 List 컬렉션 자체를 파라미터로 받을 수 있게 string.Join<string> 정적 메소드가 존재한다고 한다. C# 4.0 기술 들도 이제 슬슬 블로그에서 보인다..
C# Join String List



Posted by six605
,