.NET 实现 Split字符切割

Posted 菜鸟一路逛奔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.NET 实现 Split字符切割相关的知识,希望对你有一定的参考价值。

昨天朋友面试安卓,笔试题。完全不考安卓,考编程基础(PS: 还完全在纸上手写)

题如下:实现Split功能

要求

功能一:实现单字符切割。如:split(\'|\');

要求二:实现对对string的切割,如:Split("abc");

于是我给出第一个版本

 

        public static string[] SpiltStrings(this string str, char splitStr)
        {
            if (!str.EndsWith(splitStr.ToString()))
            {
                str += splitStr;
            }
            var list = new List<string>();
            var temp = 0;
            for (int i = 0; i < str.Length; i++)
            {
                var item = str[i];
                if (string.Equals(item, splitStr))
                {
                    list.Add(str.Substring(temp, i - temp));
                    temp = str.IndexOf(item, i);
                    str = str.Remove(i, 1);
                }
            }
            return list.ToArray();
        }

 

调用方法:

            var str = "123|45||67";
            var a = str.SpiltStrings(\'|\');

  运行结果如下:

                           而  自带函数spiit的结果如下

    还是有一定差距的

 

     暂无法解决连续的“||”问题;

     遇到的问题总结下:

   一:foreach (var item in str)中:取str.indexOf(item);item可能字符串中存在多个。indexOf(item)永远是取第一个无法定位他正确的位置  (ps:可用indexOf(char,startIndex),麻烦)

  二:主要依赖Substring函数,容易造成细节问题。难处理

  三:str.Remove(index);记得要重新赋值:str = str.Remove(index);

升级版本

    

        public static string[] SpiltStrings_s(this string str, char splitStr)
        {
            var list = new List<string>();
            var sb = new StringBuilder();
            if (!str.EndsWith(splitStr.ToString()))
            {
                str += splitStr;
            }
            foreach (var item in str)
            {
                sb.Append("");
                if (!string.Equals(item, splitStr))
                {
                    sb.Append(item);
                }
                else
                {
                    list.Add(sb.ToString());
                    sb = new StringBuilder();
                }
            }
            return list.ToArray();
        }

 

  运行结果如下:

     

     好了,搞定 

     看似简单,其实我们都是站在巨人的肩膀上。

 

功能二:目前没有找到自己能实现的方法,暂时贴这个。在最初版本上改的

 

代码如下:

        public static string[] SpiltStrings(this string str, string splitStr)
        {
            var list = new List<string>();
            var temp = 0;
            var splitLenth = splitStr.Length;
            var endStr = str.Substring(str.Length - splitLenth);
            if (!string.Equals(endStr, splitStr))
            {
                str += splitStr;
            }
            for (var i = 0; i < str.Length; i++)
            {
                var str1 = string.Empty;
                for (var j = 0; j < splitLenth; j++)
                {
                    if (i + j >= str.Length)
                    {
                        break;
                    }
                    str1 += str[i + j];
                }
                if (string.Equals(str1, splitStr))
                {
                    list.Add(str.Substring(temp, i - temp));
                    temp = i;
                    str = str.Remove(i, splitStr.Length);
                }
            }
            return list.ToArray();
        }

 

调用:

            var str1 = "12454$$454$$$4445";
            var b = str1.SpiltStrings("$$");

 

 运行结果:

          

也存在问题:  

    一:当连续出现多个时“$$$”,切割符号“$$",需求切割不明确

    

----------------------------------------------------------------------------------------

最后,欢迎大神贴算法解法,点不足。本人菜鸟,需要学习

 

 

  

以上是关于.NET 实现 Split字符切割的主要内容,如果未能解决你的问题,请参考以下文章

split切割.号的字符串

用最简单的方式实现用split切割的数组 去掉最后一个空数组。

Java 利用 split 方法切割字符串

js实现字符串切割并转换成对象格式保存到本地

字符串的切割操作(strtok,split)

java使用split切割字符串的时候,注意转义字符