day04-字符串学习

day04-字符串学习

一、字符编码知识背景

编码产生时间线

​ ASCII(1967年)–>GB2312(1980年)–>Unicode(1991年)–>UTF-8(1992年)–>GBK(1995年)–>GB18030(2000年)

字符编码简述:

  • ASCII码(American Standard Code for InformationInterchange) 美国信息交换标准代码 :主要用于解决英语的显示问题

  • GB2312:主要解决简体汉字的显示,但汉字集合太少,不支持繁体汉字。

  • Unicode:容纳世界所有文字符号的国际标准编码 ,统一了全世界字符的二进制编码 ,以书本形式对外发表。

  • UTF-8(Unicode Tranformation Format ):unicode的一种使用方式。

  • UTF 系列编码方案( UTF-8、 UTF-16、 UTF-32) 均是由 Unicode编码方案衍变而来, 以适应不同的数据存储或传递, 它们都可以完全表示 Unicode 标准中的所有字符。 使用最广的还是UTF-8

  • GBK:兼容GB2312,支持更多的汉字,也支持繁体,但不属于官方标准,只是国内的通用标准。

  • GB18030:中国最新国家标准,收录了 27484 个汉字, 同时收录了藏文、 蒙文、 维吾尔文等主要的少数民族文字。

字符编码参考资料:

字符编码CSDN博客链接

Java工程师成神之路(基础篇)–>JAVA语言基础–>编码方式

注意点:在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。

二、python字符串相关特点

字符串表示方式

把单个或多个字符用单引号或者双引号包围起来,就可以表示一个字符串。

​ Python 中单引号 ’ 和双引号 " 使用完全相同。且Python 不支持单字符类型,单字符在 Python 中也是作为一个字符串使用。

s1 = 'hello s1'
s2 = "hello s2"
# 使用三引号(''' 或 """)可以指定一个多行字符串。
s3 = """
hello
s3
"""
s4 = '''
hello
s4
'''
print(s1, s2, s3, s4, end='')  # 设置print语句的结束符不为换行符

输出结果:

hello s1 hello s2 
hello
s3

hello
s4

字符串转义输出

在需要在字符中使用特殊字符时,python 用反斜杠 \来表示 转义字符。

常用转义符

转义字符描述
\续行符,一行内容太多,可通过\实现分行显示,不是换行符!!!
\b退格,退格\b前面的一个字符
\000
\n换行符
\t横向制表符
\r回车符用\r后面的字符替换\r之前的字符

使用示例:

print("12345\
6789")  # 续行符
print('hello test\r python')  # 回车符
print('hello\bpython')  # 退格符
print('12345\0006')  # 空
print("1234\"python")  # 双引号转义
print("1234\\python")  # \转义
print("12345\t67890") # 制表符
print("12345\n6789")  # 换行符

输出结果:

123456789
 python
hellpython
12345 6
1234"python
1234\python
12345	67890
12345
6789

当然对转义字符不熟悉,和要输出大量的没有转义的原始字符可以通过r/R的方式输出,该方式经常用在正则表达式语句中。

print(r'...."/n5/r//6/t/b///v8970/000dfg')   #输出:...."/n5/r//6/t/b///v8970/000dfg
print(R'...."/n5/r//6/t/b///v8970/000dfg')   #输出:...."/n5/r//6/t/b///v8970/000dfg

字符串相关运算符:

  • 字符串可以用 + 运算符连接在一起,用 * 运算符实现重复,与*结合的数字为复制的次数。
  • 字符串支持索引运算符[],有两种索引方式,从左往右以 0 开始,从右往左以 -1 开始。
  • 支持[:]切片运算符 ,变量[头下标:尾下标:步长] 规则是左闭右开,头下标默认是第一个字符(0)、尾下标默认是最后一个字符,步长默认是1
  • in \ not in 运算符, 判断字符串中是否包含指定字符串,返回 bool值

示例:

s = 'hello'
s0 = 'abcdefg1234567'
s1 = 'hello' + ' python'
print(s1)
s2 = s * 2
print(s2)
print('s0 ', s0)
print('s0[2] ', s0[2])
print('s0[1:3] ', s0[1:3])
print('s0[1:6:2] ', s0[1:6:2])
print('s0[1:] ', s0[1:])
print('s0[::2] ', s0[::2])
print('s0[:] ', s0[:])
print('s0[::-1] ', s0[::-1])
print('s0[-3:-1] ', s0[-3:-1])
print('"ab" in s0 ?', 'ab' in s0)
print('"ab" not in s0 ?', 'ab' not in s0)

输出:

hello python
hellohello
s0  abcdefg1234567
s0[2]  c
s0[1:3]  bc
s0[1:6:2]  bdf
s0[1:]  bcdefg1234567
s0[::2]  aceg246
s0[:]  abcdefg1234567
s0[::-1]  7654321gfedcba
s0[-3:-1]  56
"ab" in s0 ? True
"ab" not in s0 ? False

字符串的相关内置函数:

函数描述
len()返回字符串的长度,包括不可见字符
string.capitalize()返回字符串的副本,但将第一个字符大写
string.casefold()返回经过标准化( normalize)后的字符串,标准化类似于转换为小写,但更适合用于对Unicode字符串进行不区分大小写的比较
string.center(width[, fillchar])返回一个长度为(len(string), width)的字符串。这个字符串的中间包含当前字符串,但两端用fillchar指定的字符(默认为空格)填充
string.count(sub[, start[, end]])计算子串sub出现的次数,可搜索范围限定为string[start:end]
string.encode([encoding[,errors]])返回使用指定编码和errors指定的错误处理方式对字符串进行编码的结果,参数errors的可能取值包含’strict’、‘ignore’、'replace’等
string.endswith(suffix[,start[,end]])检查字符串是否以suffix结尾,还可使用索引start和end来指定匹配范围
string.expandtabs([tabsize])返回将字符串中的制表符展开为空格后的结果,可指定可选参数tabsize(默认为8)
string.find(sub[, start[, end]])返回找到的第一个子串sub的索引,如果没有找到这样的子串, 就返回-1;还可将搜索范围限制为string[start:end]
string.format(…)实现了标准的Python字符串格式设置。将字符串中用大括号分隔的字段替换为相应的参数,再返回结果
string.index(sub[, start[, end]])返回找到的第一个子串sub的索引,如果没有找到这样的子串,将引发ValueError异常;还可将搜索范围限制为string[start:end]
string.isalnum()检查字符串中的字符是否都是字母或数
string.isalpha()检查字符串中的字符是否都是字母
string.isdecimal()检查字符串中的字符是否都是十进制数
string.isdigit()检查字符串中的字符是否都是数字
string.isidentifier()检查字符串是否可用作Python标识符
string.islower()检查字符串中的所有字母都是小写的
string.isnumeric()检查字符串中的所有字符是否都是数字字符
string.isprintable()检查字符串中的字符是否都是可打印的
string.isspace()检查字符串中的字符是否都是空白字符
string.istitle()检查字符串中位于非字母后面的字母都是大写的,且其他所有字母都是
string.title()将字符串中所有单词的首字母都大写,并返回结果
string.upper()将字符串中所有的字母都转换为大写,并返回结果
string.zfill(width)在字符串左边填充0(但将原来打头的+或-移到开头),使其长度为width小写的
string.isupper()检查字符串中的字母是否都是大写的
string.join(sequence)将string与sequence中的所有字符串元素合并,并返回结果
string.ljust(width[, fillchar])返回一个长度为max(len(string), width)的字符串,其开头是当前字符串的副本,而末尾是使用fillchar指定的字符(默认为空格)填充的
string.lower()将字符串中所有的字母都转换为小写,并返回结果
string.lstrip([chars])将字符串开头所有的chars(默认为所有的空白字符,如空格、制表符和换行符)都删除,并返回结果
string.partition(sep)在字符串中搜索sep,并返回元组(sep前面的部分, sep, sep后面的部分)
string.replace(old,new[,max])将字符串中的子串old替换为new,并返回结果;还可将最大替换次数限制为max
string.rfind(sub[,start[,end]])返回找到的最后一个子串的索引,如果没有找到这样的子串,就返回-1;还可将搜索范围限定为string[start:end]
string.rindex(sub[,start[,end]])返回找到的最后一个子串sub的索引,如果没有找到这样的子串,就引发ValueError异常;还可将搜索范围限定为string[start:end]
string.rpartition(sep)与partition相同,但从右往左搜索
string.rstrip([chars])将字符串末尾所有的chars字符(默认为所有的空白字符,如空格、制表符和换行符)都删除,并返回结果
string.split([sep[, maxsplit]])返回一个列表,其中包含以sep为分隔符对字符串进行划分得到的结果(如果没有指定参数sep,将以所有空白字符为分隔符进行划分);还可将最大划分次数限制为maxsplit
string.splitlines([keepends])返回一个列表,其中包含字符串中的所有行;如果参数keepends为True,将包含换行符
string.startswith(prefix[,start[,end]])检查字符串是否以prefix打头;还可将匹配范围限制在索引start和end之间
string.strip([chars])将字符串开头和结尾的所有chars字符(默认为所有空白字符,如空格、制表符和换行符)都删除,并返回结果
string.swapcase()将字符串中所有字母的大小写都反转,并返回结果

部分使用示例:

s0 = 'abcdEfG1234567#12'
print(r"len('12345\n')", len('12345\n'), sep=":")
print("s0:", s0)
print("s0.capitalize():", s0.capitalize(), "s0:", s0)
print("s0.casefold():", s0.casefold())
print('s0.count("12"):', s0.count("12"))
print('s0.count("12",-3):', s0.count("12", -3))
print('s0.encode("gb18030"):', s0.encode("gb18030"))
print('s0.endswith("12"):', s0.endswith("12"))
print('s0.find("12"):', s0.find("12"))
print('s0.find("JK"):', s0.find("JK"))
print('s0.index("12"):', s0.index("12"))
print('s0.isalnum():', s0.isalnum())
print('s0.isalpha():', s0.isalpha())
print('s0.isdecimal():', s0.isdecimal())
print('s0.isdigit():', s0.isdigit())
print('s0.isnumeric():', s0.isnumeric())
print('s0.islower():', s0.islower())
print('s0.title():', s0.title())
print('s0.istitle():', s0.istitle())
print('s0.zfill(30):', s0.zfill(30))
print('s0.center(30,"*"):', s0.center(30, "*"))
print('s0.join("你好呀"):', s0.join("你好呀"))
print('s0.split("#"):', s0.split("#"))
print('s0.swapcase():', s0.swapcase())

输出结果:

len('12345\n'):6
s0: abcdEfG1234567#12
s0.capitalize(): Abcdefg1234567#12 s0: abcdEfG1234567#12
s0.casefold(): abcdefg1234567#12
s0.count("12"): 2
s0.count("12",-3): 1
s0.encode("gb18030"): b'abcdEfG1234567#12'
s0.endswith("12"): True
s0.find("12"): 7
s0.find("JK"): -1
s0.index("12"): 7
s0.isalnum(): False
s0.isalpha(): False
s0.isdecimal(): False
s0.isdigit(): False
s0.isnumeric(): False
s0.islower(): False
s0.title(): Abcdefg1234567#12
s0.istitle(): False
s0.zfill(30): 0000000000000abcdEfG1234567#12
s0.center(30,"*"): ******abcdEfG1234567#12*******
s0.join("你好呀"): 你abcdEfG1234567#12好abcdEfG1234567#12呀
s0.split("#"): ['abcdEfG1234567', '12']
s0.swapcase(): ABCDeFg1234567#12

三、练习:

牛客网03字符串

四、参考资料:

python官网

Python基础教程(第3版)高清中文版

廖雪峰官网

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值