C# 分隔字符串成为字符串数组的方法(保留分隔符)

要求如下:

source string: mmmmmmynameismickeym

separator: m

result string []: {"m", "m", "m", "m", "m", "m", "yna", "m", "eis", "m", "ickey", "m"}

思路分析:

1 判断 source string 是否包含 separator

1.1 若不包含,则将其包装为 string 数组返回

1.2 若包含,则进行下列操作

2 将 source string 转换为 char 数组

3 对数组每个字符依次进行检测(循环)

3.1 若不为分隔符,则先将内容存入临时 string 变量 temp

3.2 若为分隔符,则检测 temp 是否为空

  • 若 temp 不为空,则先将 temp 变量的值写入 result 数组

  • 将分隔符写入 result 数组

4 循环体外,检查 temp 变量是否为 null

  • 若不为空,则将其写入 result 数组

  • 返回 string 数组 result

代码:

// 需要引入命名空间
// using System;
// using System.Linq;

static string[] splitString(string source_str, char separator)

{

    //1. 判断 source string 是否包含 separator

    //1.1 string 中不包括分隔符

    if (source_str.IndexOf(separator) == -1)

    {

        //为了返回原字符串,将其包成一个只有一项的string数组返回

        string[] source_str_pack = new string[1];//试一试string[source_str]

        source_str_pack[0] = source_str;

        return source_str_pack;

    }

    //1.2 string 中包括分隔符

    else

    {

        //2. 将 source_str 转换为 char 数组

        char[] source = source_str.ToCharArray();

        string temp = null;

        int resultID = 0;

        string[] result = new string[source.Length];//这样的结果会有大量的 null 元素,后面在返回结果前,进行处理去除无用的 null 元素

        //3. 对数组每个字符依次进行检测

        for (int i = 0; i < source.Length; i++)

        {

            //3.1 若不为分隔符,则先将内容存入临时 string 变量 temp

            if (source[i].Equals(separator) == false)

            {

                if (temp == null)

                {

                    temp = "";

                }

                temp = temp.Insert(temp.Length, source[i].ToString());

            }

            //3.2 若为分隔符,则检测 temp 是否为空

            else

            {

                //temp不为空,先将 temp 变量的值写入 result 数组

                if (temp != null)

                {

                    result[resultID] = temp;

                    resultID++;

                    temp = null;

                }

                //将分隔符写入 result 数组

                result[resultID] = source[i].ToString();

                resultID++;

                }

            }

            //4. 检查 temp 变量是否为 null

            //若不为空,先将其写入 result 数组

            if (temp != null)

            {

                result[resultID] = temp;

                resultID++;

                temp = null;

            }

            //返回 string 数组 result

            //后面在返回结果前,进行处理去除无用的 null 元素

            result = result.Where(s => !String.IsNullOrEmpty(s)).ToArray();

            return result;

    }

}

posted @ 2016-09-04 14:41  hiwangzi  阅读(2262)  评论(0编辑  收藏  举报