.NET 實現 Split字符切割

昨天朋友面試安卓,筆試題。徹底不考安卓,考編程基礎(PS: 還徹底在紙上手寫)面試

題以下:實現Split功能算法

要求編程

功能一:實現單字符切割。如:split('|');函數

要求二:實現對對string的切割,如:Split("abc");學習

因而我給出第一個版本ui

 

        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();
        }

 

調用方法:this

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

  運行結果以下:spa

                           而  自帶函數spiit的結果以下code

    仍是有必定差距的blog

 

     暫沒法解決連續的「||」問題;

     遇到的問題總結下:

   一: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("$$");

 

 運行結果:

          

也存在問題:  

    一:當連續出現多個時「$$$」,切割符號「$$",需求切割不明確

    

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

最後,歡迎大神貼算法解法,點不足。本人菜鳥,須要學習

相關文章
相關標籤/搜索