昨天朋友面試安卓,筆試題。徹底不考安卓,考編程基礎(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("$$");
運行結果:
也存在問題:
一:當連續出現多個時「$$$」,切割符號「$$",需求切割不明確
----------------------------------------------------------------------------------------
最後,歡迎大神貼算法解法,點不足。本人菜鳥,須要學習