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