#!/usr/bin/env python
# coding:UTF-8


"""
@version: python3.x
@author:曹新健
@software: PyCharm
@file: 常见的字符串处理方法.py
@time: 2018/10/1 20:03
"""
'''
字符串常用的方法
'''

1、find:符串,返回子字符串第一个匹配位置的偏移位置,找不到时返回-1
    语法:str.find(str, beg=0, end=len(string))
    str1 = "cxj is a tester !"
    print(str1.find("tester"))

2、rfind:返回字符串最后一次出现的位置(从右向左查询),如果没有匹配项则返回-1
    语法:str.rfind(sub, beg=0 end=len(string))
        sub:查找的字符串
        beg:开始查找的位置,默认为 0
        end:结束查找位置,默认为字符串的长度
        
3、replace:完成搜索和替换,返回新字符串:
    语法:str.replace(old, new[, max])
    str1 = "cxj is a tester !"
    print(str1.replace("tester","programmer"))
    
4、in:用于判断子字符是否存在,返回True和False
    语法:substr in str 
    str1 = "cxj is a tester tester tester!"
    print("cxj" in str1)
    
5、not in:用于判断子字符是否不存在,返回True和False
    语法:substr not in str 
    str1 = "cxj is a tester tester tester!"
    print("cxj" not in str1)
    
6、strip、rstrip、lstrip:用于去除特定字符,默认为去除空格,分别为两边去除、左去除、右去除
    语法:str.strip(chars)
    str1 = "  cxj is a tester tester tester!\n"
    print(str1.strip())

7、upper:将小写英文字符转换为大写字符,返回新字符串
    语法:str.upper()
    str1 = "!  cxj is a tester tester tester!!!"
    print(str1.upper(),str1,end="\n")

8、lower:将大写英文字符转换为小写字符,返回新字符串
    语法:str.lower()
    str1 = "!  cxj is a tester tester tester!!!"
    print(str1.lower(),str1,end="\n")

9、split:使用分隔符分隔字符串,返回一个分隔后的列表
    语法:str.split(sep="", num=string.count(str))   
        aep:分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
        num:分割次数
    str1 = "cxj is a tester tester tester!!!"
    print(str1.split(" ",3))

10、splitlines:将大段字符串按行分隔,返回一个分隔后的列表
    语法:str.splitlines(keepends)   keepends表示是否保留每行最后的字符,比如换行符,False为
        不保留,True为保留,默认为不保留
    str1 = '''cxj is a tester!!!
    cxj is a programmer!
    cxj is a reader!
    cxj is a writer!
    '''
    print(str1.splitlines(True))
    
11、join:使用于将序列中的元素以指定的字符连接生成一个新的字符串。
    语法:sep.join(list|tuple...)
    st1 = ('cxj', 'is', 'a', 'tester!!!')
    print("%".join(str1))

12、eval:执行一个字符串表达式,并返回表达式的值
    语法:eval(expression[, globals[, locals]])
        expression:字符串表达式
        globals:变量作用域,全局命名空间,如果被提供,则必须是一个字典对象
        locals:变量作用域,局部命名空间,如果被提供,可以是任何映射对象。
    print(eval( '3 * x' ))      #21
    print(eval('pow(2,2)'))     #4
    
13、+:字符串连接,返回连接后的新字符串
    语法:str1 + str2
    str1 = "cxj "
    str2 = "is a tester!!!"
    print(str1 + str2)

14、*:重复输出字符串
    语法:str1 * num
    str1 = "cxj is a tester!!! "
    print(str1 * 3)
    
15、[]:通过索引获取字符串中字符,索引从0开始,可以为负数,且最后一个为-1
    语法:str1[num]
    str1 = "cxj is a tester!!! "
    print(str1[2])
    
16、[n:m]:通过索引截取字符串中的一部分(索引从n到m的子字符串),[:]代表整个字符串
    str1[n:m]
    str1 = "cxj is a tester!!! "
    print(str1[2:-1])
    
17、capitalize:将字符串的第一个字母变成大写,其他字母变小写
    语法:str.capitalize()
    str1 = "cxj is a tester!!!"
    print(str1.capitalize())
    
18、center:返回一个原字符串居中,并使用固定字符填充至长度width的新字符串。默认填充字符为空格
    语法:str.center(width[, fillchar])
        width:字符串的总宽度
        fillchar:填充字符
    str1 = "cxj is a tester!!!"
    print(str1.center(30,"*"))
    
19、ljust:返回一个原字符串左对齐,并使用空格填充至指定长度的新字符串。如果指定的长度小于原
    字符串的长度则返回原字符串
    语法:str.ljust(width[, fillchar])
        width:指定字符串长度。
        fillchar:填充字符,默认为空格。
    str1 = "cxj is a tester!!!"
    print(str1.ljust(30,"*"))

20、rjust:返回一个原字符串右对齐,并使用空格填充至指定长度的新字符串。如果指定的长度小于原
    字符串的长度则返回原字符串
    语法:str.rjust(width[, fillchar])
        width:指定字符串长度。
        fillchar:填充字符,默认为空格。
    str1 = "cxj is a tester!!!"
    print(str1.rjust(30,"*"))
        
21、zfill:返回指定长度的字符串,原字符串右对齐,前面填充0。
    语法:str.zfill(width)
        width:指定字符串的长度。原字符串右对齐,前面填充0。
   
22、count:方法用于统计字符串里某个字符出现的次数。可选参数为在字符串搜索的开始与结束位置
    语法:str.count(sub, start= 0,end=len(string))
        sub:搜索的子字符串
        start:字符串开始搜索的位置。默认为第一个字符,第一个字符索引值为0。
        end:字符串中结束搜索的位置。字符中第一个字符的索引为 0。默认为字符串的最后一个位置
    str1 = "cxj is a tester!!!"
    print(str1.count("t"))

23、encode:以encoding指定的编码格式编码字符串。errors参数可以指定不同的错误处理方案
    语法:str.encode(encoding='UTF-8',errors='strict')
        encoding:要使用的编码,如"UTF-8"。
        errors:设置不同错误的处理方案。默认为 'strict',意为编码错误引起一个UnicodeError。 
        其他可能得值有 'ignore', 'replace', 'xmlcharrefreplace', 'backslashreplace' 以及通
        过codecs.register_error() 注册的任何值。
    str1 = "cxj is a tester!!!"
    str1 = str1.encode("utf-8","strict")
    print(str1)
    
24、decode:以encoding指定的编码格式解码字符串。默认编码为字符串编码
    语法:str.decode(encoding='UTF-8',errors='strict')
        encoding:要使用的编码,如"UTF-8"。
        errors:设置不同错误的处理方案。默认为 'strict',意为编码错误引起一个UnicodeError。 
        其他可能得值有 'ignore', 'replace', 'xmlcharrefreplace', 'backslashreplace' 以及通
        过codecs.register_error() 注册的任何值。
    str1 = "cxj is a tester!!!"
    str1 = str1.encode("utf-8","strict")
    print(str1,str1.decode("utf-8","strict"),end="\n")

25、startswith|endswith:用于判断字符串是否以指定字符开头|结尾,返回True,否则返回False。
    可选参数"start"与"end"为检索字符串的开始与结束位置。
    语法:str.endswith(suffix[, start[, end]]) 或者str.startswith(suffix, beg=0,end=len(string))
        suffix:该参数可以是一个字符串或者是一个元素。
        start:字符串中的开始位置。
        end:字符中结束位置。
    str1 = "cxj is a tester!!!"
    print(str1.endswith("!!!"))

26、format:格式化字符串
    详见:
    
27、index:检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检
    查是否包含在指定范围内,返回子字符串第一个匹配位置的偏移位置,找不到时抛出异常
    语法:str.index(str, beg=0, end=len(string))
    str1 = "cxj is a tester!!!"
    print(str1.index("tester"))

28、rindex返回子字符串 str 在字符串中最后出现的位置,如果没有匹配的字符串会报异常,你可以指定
    可选参数[beg:end]设置查找的区间
    语法:str.rindex(sub, beg=0 end=len(string))
        sub:查找的字符串
        beg:开始查找的位置,默认为0
        end:结束查找位置,默认为字符串的长度。
    
29、isalnum:检测字符串是否由字母和数字组成,返回True或者False
    语法:str.isalnum()

30、isalpha:检测字符串是否只由字母组成
    语法:str.isalpha()
    
31、isdecimal:检查字符串是否只包含十进制字符
    语法:str.isdecimal()
    str1 = "376"
    print(str1.isdecimal())
    
32、isdigit:检测字符串是否只由数字组成
    语法:str.isdigit()
    
33、islower:检测字符串是否由小写字母组成
    语法:str.islower()
    
34、isnumeric:检测字符串是否只由数字组成
    语法:str.isnumeric()
    str1 = "376"
    print(str1.isnumeric())
    
35、isspace:检测字符串是否只由空格组成
    语法:str.isspace()
    
36、istitle:检测字符串中所有的单词拼写首字母是否为大写,且其他字母为小写
    语法:str.istitle()

37、isupper:检测字符串中所有的字母是否都为大写
    语法:str.isupper()

38、maketrans:用于创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符
    串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。
    PS:两个字符串的长度必须相同,为一一对应的关系
    语法:str.maketrans(intab, outtab[,delchars])   #python3的语法,str为标准库名
        intab:需要转换的字符组成的字符串。
        outtab:转换的目标字符组成的字符串。
        delchars:可选参数,表示要删除的字符组成的字符串。
        
    translate:根据参数table给出的表(包含 256 个字符)转换字符串的字符, 要过滤掉的字符放到
    del 参数中。
    语法:str.translate(table[, deletechars]);
        table:翻译表,翻译表是通过maketrans方法转换而来。
        deletechars:字符串中要过滤的字符列表。
        
    str1 = "cxj is a tester!!!"
    intab = "abcde"
    outtab = "12345"
    delchars = "!"
    table = str.maketrans(intab,outtab,delchars)
    print(str1.translate(table))
    
39、max:返回字符串中最大的字母
    语法:max(str)
    
40、min:返回字符串中最小的字母
    语法:min(str)
    
41、partition:用来根据指定的分隔符将字符串进行分割。 如果字符串包含指定的分隔符,则返回一
    个3元的元组,第一个为分隔符左边的子串,第二个为分隔符本身,第三个为分隔符右边的子串。
    语法:str.partition(sep)
    str1 = "cxj is a tester!!!"
    print(str1.partition(" "))
    #结果:('cxj', ' ', 'is a tester!!!')

42、rpartition:类似于 partition() 方法,只是该方法是从目标字符串的末尾也就是右边开始搜索分割
    符。如果字符串包含指定的分隔符,则返回一个3元的元组,第一个为分隔符左边的子串,第二个为分
    隔符本身,第三个为分隔符右边的子串。
    语法:str.rpartition(sep)

43、swapcase:用于对字符串的大小写字母进行转换。
    语法:str.swapcase()
    
44、title:返回"标题化"的字符串,就是说所有单词都是以大写开始,其余字母均为小写
    语法:str.title()