1. 实现字符串的split方法
Python split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串

思路同自定义实现replace方法类型:

  1.先找出字符串中指定分隔字符的index,考虑可能出现多次的情况使用一个列表split_str_index存储分隔字符的index

  2.使用result列表存储分隔后的字符串列表

  3.当index不在split_str_index中的的时候拼接字符串,当index在split_str_index中的的时候的将已拼接的字符串append到result列表中,特别注意最后一定要判断each判断是否为空,来决定是否append一下

  4.考虑分隔次数,使用count来统计分隔次数

def customize_split(s,split_str=' ',num=None):
result=[]
split_str_index=[]
for i in range(len(s)):
if s[i:i+len(split_str)]==split_str:
split_str_index.append(i)
#存储split_str的index
if num==None:
each =''
j=0
while j<len(s):
if j in split_str_index:
result.append(each)
each = ''
j+=len(split_str)
else:
each +=s[j]
j+=1
if bool(each):
print(bool(each))
result.append(each)
else:
each =''
j=0
count =0
while j<len(s):
if count<num and j in split_str_index:
if bool(each):
print(bool(each))
result.append(each)
each = ''
j+=len(split_str)
count+=1
else:
each +=s[j]
j+=1
if bool(each):
result.append(each)
#最后一根据each是否为空决定是否要append一下,因为有可能else是最后执行也可能if是最后执行
return result
print(customize_split('abcacabcacac','c'))

2019-02-17:新增对空白的切割,方法如下:

def customize_split(s,split_str=None,times=None):
i = 0
result =[]
item =''
if isinstance(s,str):
if times ==None and isinstance(split_str,str):
while i <len(s):
if s[i:i+len(split_str)]==split_str:
i+=len(split_str)
result.append(item)
#print(result)
item=''
else:
item +=s[i]
i+=1
result.append(item)
elif isinstance(times,int) and isinstance(split_str,str):
count =0
while i <len(s):
if s[i:i+len(split_str)]==split_str and count <times:
i+=len(split_str)
count+=1
result.append(item)
#print(result)
item=''
else:
item +=s[i]
i+=1
result.append(item)
elif times==None and split_str==None:
while i<len(s):
if (s[i]=='\t'or s[i]=='\r'or s[i]=='\n' or s[i]==' 'or s[i]=='\f'):
if item =='':
#print(item)
item=''
i+=1
else:
result.append(item)
item=''
i+=1
else:
item+=s[i]
i+=1
if item!='':
result.append(item)
elif isinstance(times,int) and isinstance(split_str,str):
while i<len(s):
if count<times and (s[i]=='\t'or s[i]=='\r'or s[i]=='\n'or s[i]==' 'or s[i]=='\f'):
if item =='':
#print(item)
item=''
i+=1
count+=1
else:
result.append(item)
item=''
i+=1
count+=1
else:
item+=s[i]
i+=1
if item!='':
result.append(item)
else:
result =-1 else:
result =-1
return result
print(customize_split(' a b\nc\td\re\f\t\r\ng'))

20190120-自定义实现split方法的更多相关文章

  1. Asp.net MVC4.0自定义Html辅助方法

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...

  2. java中String对象的split方法

    在java.lang包中有String.split()方法,返回是一个String[]数组,今天碰到一个自己没注意的问题: 1.特殊分隔符 String str1 = "123|456|78 ...

  3. python学习历程之split()方法获取cmd mysql 结果集

    if __name__=='__main__': FServerId = raw_input("Please input source id:") GetFileKey(FServ ...

  4. C# String.split()用法小结。String.Split 方法 (String[], StringSplitOptions)

    split()首先是一个分隔符,它会把字符串按照split(' 字符')里的字符把字符串分割成数组,然后存给一个数组对象. 输出数组对象经常使用foreach或者for循环. 第一种方法 string ...

  5. jQuery Validate 表单验证插件----自定义一个验证方法

    一.下载依赖包 网盘下载:https://yunpan.cn/cryvgGGAQ3DSW  访问密码 f224 二.引入依赖包 <script src="../../scripts/j ...

  6. JavaScript split() 方法

    split() 方法用于把一个字符串分割成字符串数组.

  7. [转]C++ string的trim, split方法

    很多其他语言的libary都会有去除string类的首尾空格的库函数,但是标准C++的库却不提供这个功能.但是C++string也提供很强大的功能,实现trim这种功能也不难.下面是几种方法: 1.使 ...

  8. String.split()方法你可能不知道的一面

    一.问题 java中String的split()是我们经常使用的方法,用来按照特定字符分割字符串,那么我们看以下一段代码: public void splitTest() { String str = ...

  9. [Java] String.Split 方法的6个重载函数

    String.Split 方法有6个重载函数: 程序代码 1) public string[] Split(params char[] separator) 2) public string[] Sp ...

随机推荐

  1. SQL点点滴滴_常用函数

    该文章转载自http://www.cnblogs.com/jiajiayuan/archive/2011/06/16/2082488.html 别人的总结,很详细. 以下所有例子均Studnet表为例 ...

  2. Java不带.classpath的svn项目下载,转成到eclipse中

    .classpath是Eclipse的工程文件,别人没有将工程的信息传到SVN库中,就检查不出.classpath文件,识别不了项目结构. 这种做法也是比较提倡的方法.SVN上只要有项目的源码信息就可 ...

  3. 对std::map进行排序

    1.对Key排序. std::map的第三个参数即为对key进行排序的比较函数.默认为less,表示升序.如果要降序,可以改为greater. 2.对Value排序 不支持,因为map不是一个序列的容 ...

  4. July 24th 2017 Week 30th Monday

    The only limit to our realization of tomorrow will be our doubts of today. 实现明天理想的唯一障碍就是今天的疑虑. When ...

  5. 罗大佑 光阴的故事 ZT 欧美经典歌曲100首(1-50)

    老俞 my idol ———————————————————————————————— 罗大佑 光阴的故事 歌曲光阴的故事为2008年入库,是罗大佑在2000-1-1发行的专辑<情歌精选> ...

  6. LINQPad 编译调试C#代码的工具推荐

    LinqPad介绍 学习C#代码的好帮手,很容易调试C#代码片段. LINQPad 4 支持.NET Framework 4.0 / 4.5 ,专业调试LINQ,lambda等特性,完全取代Snipp ...

  7. Manifold Learning: ISOMAP

    转:http://hi.baidu.com/chb_seaok/item/faa54786a3ddd1d7d1f8cd0b 在常见的降维方法中,PCA和LDA是最为常用的两种降维方法.PCA是一种无监 ...

  8. 记两个std接口equal_range,set_difference

    1.equal_range equal_range是C++ STL中的一种二分查找的算法,试图在已排序的[first,last)中寻找value,它返回一对迭代器i和j,其中i是在不破坏次序的前提下, ...

  9. 蓝牙BLE4.0的LL层数据和L2CAP层数据的区分与理解

    一直搞不太清楚蓝牙BLE协议,不知道LL层和L2CAP层是如何划分的,后来博士给我讲了讲就理解了,写下来,做个记录: 1. 我们知道,除了蓝牙5.1新出的CTE,所有的BLE都是如下类型的包: 对于连 ...

  10. 提交文件到ng-pages分支

    一.提交dist文件夹到ng-pages分支 git subtree push --prefix=dist origin gh-pages 二.提交所有文件到ng-pages分支 text git:( ...