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. task可声明参数 z

    直接这样写 var task1 = Task.Factory.StartNew(() => DoSomeWork(message1, message2)); 如果是winform,你在另外一个线 ...

  2. FQDN说明

    以下摘自百度百科: FQDN:(Fully Qualified Domain Name)完全合格域名/全称域名,是指主机名加上全路径,全路径中列出了序列中所有域成员.全域名可以从逻辑上准确地表示出主机 ...

  3. February 6 2017 Week 6 Monday

    There are no shortcuts to any place worth going. 任何值得去的地方,都没有捷径. Several years ago, I climbed the Hu ...

  4. 最详细的Vue Hello World应用开发步骤

    很多Vue的初学者想尝试这个框架时,都被webpack过于复杂的配置所吓倒,导致最后无法跑出一个期望的hello word效果.今天我就把我第一次使用webpack打包一个Vue Hello Worl ...

  5. U-Mail邮件群发:邮件营销最全建议

    U-Mail专注于邮件营销平台研发工作多年了,服务企业数千家,拥有上万IP,在国内外基础设施建设上投资巨大,技术团队精湛.客服人员热情,赢 得了业界的好评和用户信任.有一些用户给我们发来邮件或来电咨询 ...

  6. MongoDB插入文档

    db.collection.insertOne() 插入单个文档.db.collection.insertMany() 插入多个文档.db.collection.insert() 插入单/多个文档.  ...

  7. SOJ3266 Birthday

    Time Limit: 1000MS Memory Limit: 65536 K Description Today is Windy's birthday. What can I say? Inpu ...

  8. Could not publish to the server. null argument:

    启动tomcat或clean tomcat报错:Could not publish to the server. null argument: Could not publish to the ser ...

  9. UVa 1220 - Party at Hali-Bula(树形DP)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  10. BZOJ1923:[SDOI2010]外星千足虫(高斯消元)

    Description Input 第一行是两个正整数 N, M. 接下来 M行,按顺序给出 Charles 这M次使用“点足机”的统计结果.每行 包含一个“01”串和一个数字,用一个空格隔开.“01 ...