码迷,mamicode.com
首页 > Web开发 > 详细

.NET 实现 Split字符切割

时间:2016-05-26 16:02:23      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:

昨天朋友面试安卓,笔试题。完全不考安卓,考编程基础(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字符切割

标签:

原文地址:http://www.cnblogs.com/daijingli/p/5531429.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!