昨天朋友面试安卓,笔试题。彻底不考安卓,考编程基础(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("$$");
运行结果:
也存在问题:
一:当连续出现多个时“$$$”,切割符号“$$",需求切割不明确
----------------------------------------------------------------------------------------
最后,欢迎大神贴算法解法,点不足。本人菜鸟,须要学习