반응형

예를 들어 string val =  "abc,def,hij"라는 문자열을 ","로 구분해서 배열로 변경하려한다면

string[] tmp = val.Split(','); 이렇게 하면 된다. 그런데 배열 구분자가 1바이트가 아니라면?


다시 예를 들어본다면 string val =  "abc<br/>def<br/>hij" 이런형태의 문자열에서 "<br/>"을 split하려고 하면

불가능하다. 이를 split해주는 방법은 아래와같다.

string[] _tmp = System.Text.RegularExpressions.Regex.Split(val, "<br/>");


그러나... ↑ 요고로 해결이 안될경우도 있다. ㅡ,.ㅡ;;;

그래서 확실한 방법은 아래와 같다.


public static string[] SplitByString(string inVal, string split)

    {

        int offset = 0;

        int index = 0;

        int[] offsets = new int[inVal.Length + 1];

        while (index < inVal.Length)

        {

            int indexOf = inVal.IndexOf(split, index);

            if (indexOf != -1)

            {

                offsets[offset++] = indexOf;

                index = (indexOf + split.Length);

            }

            else

            {

                index = inVal.Length;

            }

        }

        string[] final = new string[offset + 1];

        if (offset == 0)

        {

            final[0] = inVal;

        }

        else

        {

            offset--;

            final[0] = inVal.Substring(0, offsets[0]);

            for (int i = 0; i < offset; i++)

            {

                final[i + 1] = inVal.Substring(offsets[i] + split.Length, offsets[i + 1] - offsets[i] - split.Length);

            }

            final[offset + 1] = inVal.Substring(offsets[offset] + split.Length);

        }

        return final;

    }


어디서 퍼왔는데 출처까먹음 ㅠㅠ

+ Recent posts