1. 程式人生 > >C# 之 字串擷取--Split

C# 之 字串擷取--Split

        上一篇部落格《C# 之 字串擷取--Substring》 介紹了Substring函式,同時實現將"所屬機構名稱/教師姓名/課程型別/課程名稱"中的所屬機構名稱,教師姓名,課程型別,課程名稱分別截取出來。今天再給大家介紹一種字串擷取的函式Split。


        String.Split方法:返回的字串陣列包含此例項中的子字串(由指定 Unicode 字元陣列(separator)的元素分隔)。


        String.Split方法的過載方法有六種型別,但是我覺得都大同小異,只是引數不同,只是需求不同,其中的引數主要有:

       1.Char[] 由指定的Unicode字元陣列的元素分隔。
       2.Int32  指定返回子字串的最大數量。
       3.StringSplitOptions 這個引數是一個列舉型別的引數,只有兩種選項:第一種StringSplitOptions.None表示返回值包括含有空字串的陣列元素;第二種StringSplitOptions.RemoveEmptyEntries表示返回值不包括含有空字串的陣列元素。
       4.String[] 由指定字串陣列的元素分隔。


       只要我們瞭解上面的四種引數分別代表什麼意思,我們就可以根據我們的需求去具體的選擇我們需要過載哪一個Split函式。下面是我將所有的Split函式過載方法實現的一個小例子:

public string[] Split(params char[] separator);

class Program
    {
        static void Main(string[] args)
        {
            string s1 = "所屬機構名稱/教師姓名/課程型別/課程名稱";

            string[] split = s1.Split(new char[] { '/' });    //返回由'/'分隔的子字串陣列
            foreach (string s in split)
            {
                Console.WriteLine(s);
            }
            Console.WriteLine();
        }
    }

public string[] Split(char[] separator, int count);

class Program
    {
        static void Main(string[] args)
        {
            string s1 = "所屬機構名稱/教師姓名/課程型別/課程名稱";

            string[] split = s1.Split(new char[] { '/' }, 3);   //返回由'/'分隔的子字串陣列,子字串最大數量為3個
            foreach (string s in split)
            {
                Console.WriteLine(s);
            }
            Console.WriteLine();
        }
    }


public string[] Split(char[] separator, StringSplitOptions options);

class Program
    {
        static void Main(string[] args)
        {
            string s1 = "所屬機構名稱/教師姓名/課程型別/課程名稱";

            //返回由'/'分隔的子字串陣列,StringSplitOptions.RemoveEmptyEntries表示返回值不包括含有空字串的陣列元素
            string[] split = s1.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
            foreach (string s in split)
            {
                Console.WriteLine(s);
            }
            Console.WriteLine();
        }
    }


public string[] Split(string[] separator, StringSplitOptions options);

class Program
    {
        static void Main(string[] args)
        {
            string s1 = "所屬機構名稱/教師姓名/課程型別/課程名稱";

            //返回由"名"分隔的子字串陣列,StringSplitOptions.None表示返回值包括含有空字串的陣列元素
            string[] a = new string[] { "名" };
            string[] split = s1.Split(a, StringSplitOptions.None);
            foreach (string s in split)
            {
                Console.WriteLine(s);
            }
            Console.WriteLine();
        }
    }


public string[] Split(char[] separator, int count, StringSplitOptions options);

class Program
    {
        static void Main(string[] args)
        {
            string s1 = "所屬機構名稱/教師姓名/課程型別/課程名稱";

            //返回由'/'分隔的子字串陣列,子字串最大數量為3個,StringSplitOptions.RemoveEmptyEntries表示返回值不包括含有空字串的陣列元素
            string[] split = s1.Split(new char[] { '/' }, 3, StringSplitOptions.RemoveEmptyEntries);
            foreach (string s in split)
            {
                Console.WriteLine(s);
            }
            Console.WriteLine();
        }
    }


public string[] Split(string[] separator, int count, StringSplitOptions options);

class Program
    {
        static void Main(string[] args)
        {
            string s1 = "所屬機構名稱/教師姓名/課程型別/課程名稱";

            //返回由"名"分隔的子字串陣列,子字串最大數量為3個,StringSplitOptions.None表示返回值包括含有空字串的陣列元素
            string[] a = new string[] { "名" };
            string[] split = s1.Split(new char[] { '/' }, 3, StringSplitOptions.None);
            foreach (string s in split)
            {
                Console.WriteLine(s);
            }
            Console.WriteLine();
        }
    }




    如果現在讓我們來實現上一篇部落格中的需求:將"所屬機構名稱/教師姓名/課程型別/課程名稱"這個字串,按照"/"分別截取出來。是不是更簡單了呢?直接用第一個最簡單的過載函式就能解決我們的問題了...
class Program
    {
        static void Main(string[] args)
        {
            string s1 = "所屬機構名稱/教師姓名/課程型別/課程名稱";

            string[] split = s1.Split(new char[] { '/' });    //返回由'/'分隔的子字串陣列
            foreach (string s in split)
            {
                Console.WriteLine(s);
            }
            Console.WriteLine();
        }
    }




    Split函式也能實現我們想要的字串擷取功能,雖然它返回的是一個字串陣列,過載的引數也比較多,但是和Substring函式相比起來更容易讓人理解......