20190120-自定义实现split方法
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方法的更多相关文章
- Asp.net MVC4.0自定义Html辅助方法
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...
- java中String对象的split方法
在java.lang包中有String.split()方法,返回是一个String[]数组,今天碰到一个自己没注意的问题: 1.特殊分隔符 String str1 = "123|456|78 ...
- python学习历程之split()方法获取cmd mysql 结果集
if __name__=='__main__': FServerId = raw_input("Please input source id:") GetFileKey(FServ ...
- C# String.split()用法小结。String.Split 方法 (String[], StringSplitOptions)
split()首先是一个分隔符,它会把字符串按照split(' 字符')里的字符把字符串分割成数组,然后存给一个数组对象. 输出数组对象经常使用foreach或者for循环. 第一种方法 string ...
- jQuery Validate 表单验证插件----自定义一个验证方法
一.下载依赖包 网盘下载:https://yunpan.cn/cryvgGGAQ3DSW 访问密码 f224 二.引入依赖包 <script src="../../scripts/j ...
- JavaScript split() 方法
split() 方法用于把一个字符串分割成字符串数组.
- [转]C++ string的trim, split方法
很多其他语言的libary都会有去除string类的首尾空格的库函数,但是标准C++的库却不提供这个功能.但是C++string也提供很强大的功能,实现trim这种功能也不难.下面是几种方法: 1.使 ...
- String.split()方法你可能不知道的一面
一.问题 java中String的split()是我们经常使用的方法,用来按照特定字符分割字符串,那么我们看以下一段代码: public void splitTest() { String str = ...
- [Java] String.Split 方法的6个重载函数
String.Split 方法有6个重载函数: 程序代码 1) public string[] Split(params char[] separator) 2) public string[] Sp ...
随机推荐
- Geekforgeek week1
1. is palindrome solution 1: check to reverse the digit, if they are the same number https://www.gee ...
- [原]零基础学习SDL开发之在Android使用SDL2.0加载字体
在上一篇文章我们知道了如何在android使用SDL2.0来渲染显示一张png图,而且在上上一篇我们知道如何使用sdl来渲染输出bmp图,那么sdl是否可以渲染输出自己喜爱的字体库的字体呢?答案是当然 ...
- 关于浏览器被http://www.51jetso.com/劫持
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/wwkaven/article/details/36373447 近期,新装了一下系统.安装软 ...
- JAVA二叉树递归构造、二叉树普通遍历及递归遍历
二叉树类: package com.antis.tree; public class BinaryTree { int data; //根节点数据 BinaryTree left; //左子树 Bin ...
- JAVA JAVA面试题和项目面试核心要点精华总结(想进大公司必看)
http://blog.csdn.net/ourpush/article/details/53706524 1.常问数据库查询.修改(SQL查询包含筛选查询.聚合查询和链接查询和优化问题,手写SQL语 ...
- BZOJ2118:墨墨的等式(最短路)
Description 墨墨突然对等式很感兴趣,他正在研究a1x1+a2y2+…+anxn=B存在非负整数解的条件,他要求你编写一个程序,给定N.{an}.以及B的取值范围,求出有多少B可以使等式存在 ...
- 汇编试验十四:访问CMOS RAM
CMOS RAM 芯片的特征: 包含一个时钟和一个有128个存储单元的RAM存储器. 该芯片靠电池供电.所以,关机后其内部的时钟仍可正常工作,RAM中的信息不丢失. 128个字节的RAM中,内部时钟占 ...
- yii2.0 在save保存之前的操作(放在模型model文件内)
public function beforeSave($insert){ if(parent::beforeSave($insert)) { if($insert) { } else { } retu ...
- 原生JS写验证码
1.先创建一个一个输入框用来用户输入验证码和一个span容器用来存放系统给出的验证码和一个刷新按钮还有一个登录按钮 <input type="text" class=&quo ...
- 大数据-图表插件-echarts 样式修改(迭代)
修改折线图大小 myChart.setOption({ title:{ text:"价格指数" ...