.NET 实现 Split字符切割

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

.NET 实现 Split字符切割的相关文章

freemarker中间split字符串切割

1.简易说明 split切割:用来依据另外一个字符串的出现将原字符串切割成字符串序列 2.举例说明 <#--freemarker中的split字符串切割--> <#list "张三三,李思思,,王强,柳树,诸葛正我"? split(",") as name> "${name}" </#list> <#list "AhuAjiuAjkdsfAoionAjiuiAnujkkdfAkoijAmcjdh

shell 关于字符切割 cut

shell中运用于字符切割的是cut 其中 参数分别代表得意义是: -d :后面接分隔字符,将一段信息分割为数段,与 -f 一起使用 -f :将-d分割出来的数段 用 -f 取出第几段的意思 -c :以字符 (characters) 的单位取出固定字符区间: 例如: path='/home/xx/Desktop/xx/my' item=`echo $path | cut -d '/' -f2` echo $item 输出的是:home path='/home/xx/Desktop/xx/my'

【面试】Python字符切割,replace+split

string = 'i am a chinese boy,but she is a japanese girl,she is russia girl.please tell me that how do i choice?' \ 'and can we happyniess?can we happyniess?' # 1.直接替换不需要的符号,在使用精灵函数切割 print(string.replace(',', ' ').replace('?', ' ').replace('.', ' ').

Java 利用 split 方法切割字符串

之前经常遇到切割字符串的情况,这里把常见的场景总结一下: 1 // 以空格切割 2 String s1 = "dew qefdewrfr freqg gtrh yt hy"; 3 String[] words1 = s1.split("\\s+"); 4 5 // 以 . 切割 6 String s2 = "dew.qefdewrfr.freqg.gtrh.yt.hy"; 7 String[] words2 = s2.split("\\

Java,js,多条件split字符分割

后台字符串分割处理: String s = "i20002/400|i3030/300";        String[] s1 = s.split("\\||/");                   for (int i = 0; i < s1.length; i++) {           System.out.println(s1[i]);        } //输出结果:i20002 400 i3030 300 在Java中 "|&qu

jquery根据字符切割字符串

<script> var str=new String(); var arr=new Array(); str="ddd,dsd,3,dd,g,k"; //可以用字符或字符串分割 arr=str.split(','); for(var i=0;i<arr.length;i++) { alert(arr[i]); }

split方法切割数组

指定的字符串按"o"截取 当一个base64需要剪去前面的部分的时候 var params={ "imgJustBase64":this.zheng.split(",")[1], "imgBackBase64": this.fan.split(",")[1], } 原文地址:https://www.cnblogs.com/lml-lml/p/8964270.html

js split str.split(&amp;quot; &amp;quot;); split使用方法 在某处截字符串

<script language="javascript">    str="2,2,3,5,6,6"; //这是一字符串var strs= new Array(); //定义一数组 strs=str.split(","); //字符切割      for (i=0;i<strs.length ;i++ )        {            document.write(strs[i]+"<br/>&

split命令:文件切割

有时候文件过大,导致不能正常使用,可以用split进行切割. 命令参数: split [选项] [要切割的文件] [输出文件名前缀] -a, --suffix-length=N  切割文件的后缀的位置,default 为2 -b, --bytes=SIZE       指定块的大小,可以指定size的单位,b表示512字节,k代表1K字节,m代表1M字节,还有G,T,P -d, --numeric-suffixes 利用数据前缀,而不是字母前缀,默认是字母前缀. -l, --lines=NUMB