string strS = "xml/table/tgroup/tbody/d/dsda/a/da/sd/asd/asd/ad/a";
如何按照每次取number 数量的 '/' ,并将其放入一个list<string>
例如,number = 2
那么 list<string>[0] = "xml/table/"
list<string>[1] = "tgroup/tbody/"
string strS = "xml/table/tgroup/tbody/d/dsda/a/da/sd/asd/asd/ad/a"; int number = 10; int count = 0, startIdx = 0; var list = new List<string>(); for (int i = 0; i < strS.Length; i++) { if (strS[i] == '/') { //当count = number-1时,加上当前次,就刚好是number数量的'/' if (count == number - 1) { list.Add(strS.Substring(startIdx, (i + 1) - startIdx)); startIdx = i + 1; count = 0; } } }
我知道您老是真正的大神,但是,结果不对啊啊啊啊 啊啊啊啊啊 啊啊啊,而且,一个个的判断会不会太慢了
@代码小兵的成长: 抱歉,贴代码的时候,删错了:
string strS = "xml/table/tgroup/tbody/d/dsda/a/da/sd/asd/asd/ad/a"; int number = 2; int count = 0, startIdx = 0; var list = new List<string>(); for (int i = 0; i < strS.Length; i++) { if (strS[i] == '/') { count += 1; //当count = number-1时,加上当前次,就刚好是number数量的'/' if (count == number) { list.Add(strS.Substring(startIdx, (i + 1) - startIdx)); startIdx = i + 1; count = 0; } } }
@幻天芒: 多谢大神你了,不过,我的数据很长的,达到几千条,这样判断我害怕慢啊
@代码小兵的成长: 你可以试试效率哇。
@幻天芒: 你信不信我老大看见我这样写会抽死我,哈哈,我就告诉他是大神你写的,您老再博客园的排名太高了
@代码小兵的成长: 难道非得用正则才算高大上么?
@代码小兵的成长: 没有生气哈。。直接遍历str的写法,在我电脑上。1000000次耗时500毫秒,lambda的写法,耗时在2000毫秒左右。
@幻天芒: 恩恩,多谢大神了,我用你的
@代码小兵的成长: 代码还可以优化,不过我想效率应该不是问题。
string strS = "xml/table/tgroup/tbody/d/dsda/a/da/sd/asd/asd/ad/a"; string[] arr = strS.Split('/'); List<string> list = new List<string>(); //因为最后一个没有'/',所以我这里取length-1 for (int i = 0, len = arr.Length-1; i < len; i++) { list.Add(string.Join("/", arr.Take(i + 1))+"/"); }
哥,我能告诉你,我这个strS就是一个个拼接出来的,当然不能为了分组再分开了,不过多谢您老了,让你这么麻烦
而且,您老这个方法错的离谱,哈哈
@代码小兵的成长: 这个代码改改你就可以用了,可以把两种方法比比效率。
@幻天芒: 可是我不愿意用split()啊,您老那个看着又太直白,我不是说要高大上,但是不能一个个的试啊,您老别生气,我就是想再好点而已,我自己早就想到了一个更复杂更费脑子的方法了,只不过我自己都有点看不懂,写的不是人看的
@代码小兵的成长: 呵呵,是的,我确实没有理解题意。没看明白题目就回答了,不好意思。
@代码小兵的成长:
string strS = "xml/table/tgroup/tbody/d/dsda/a/da/sd/asd/asd/ad/a"; int number = 2; string[] arr = strS.Split('/'); List<string> list = new List<string>(); //因为最后一个没有'/',所以我这里取length-1 for (int i = 0, len = arr.Length/2; i < len; i++) { list.Add(string.Join("/", arr.Skip(i * number).Take(number)) + "/"); }
Linq+lambda的写法。
完全不会有性能优化...每次修改string时都有产生一个新的string对象.因为string是不可变的.....
基于这个原则.你把数组和起来去循环跟把他全分开来.不会有什么影响的.
这种级别的性能问题.不是需要考虑的.
我也知道这种小细节不需要考虑,但是总得为了好习惯考虑一些,不过你刚刚说的那个道理我知道,但是你不说我还真想不起来会这样理解,多谢您老了