# encoding: utf-8
# 字符串:有序的字符集合
# 字符串拼接
print("hello" + "word")
print("hello%s%d" % ("word", 123))
print("hello\t" * 10)
# 字符串切片
s = "abcdefg"
print(s[0])
print(s[-1])
print(s[0:3])
print(s[::])
print(s[::1])
print(s[::2])
print(s[::-1])
print(s[-1:-4:-1])
# 字符长度 len
print(len(s))
# 一个汉字占一个字符
print(len("我是ab"))
# 转义符算作一个字符
print(len("我是ab\n"))
print(len("我是ab\\n"))
print(len(r"我是ab\\n"))
# 字符串查找 find
# find 函数:s.find(sub, 0, len(s))
# 没查找到返回 -1
print(s.find("ab"))
print(s.find("c", 0, 4))
# rfind 函数:功能同 find 从右往左查找
print(s.rfind("cd", 0, 5))
# 字符串查找 index
# index 函数:s.index(sub, 0, len(s))
# 没查找到返回异常
print(s.index("c", 0, 4))
# rindex 函数:功能同 index 从右往左查找
print(s.rindex("cd", 0, len(s)))
# count 函数 count
# 计算子字符串出现的次数
# 函数:s.count(sub, 0, len(s))
print(s.count("a", 0, 3))
# 字符串替换 replace
# replace 函数:s.replace(old, new, count)
# 注意事项:replace 函数并不会修改字符串本身
print(s.replace("b", "k"))
print(s.replace("b", "k", 1))
print(s)
# 字符串首字母大写 capitalize
# 注意事项:capitalize 函数并不会修改字符串本身
print(s.capitalize())
print(" ab".capitalize())
# 字符串每个单词首字母都大写 title
# 注意事项:title 函数并不会修改字符串本身
print("hello word".title())
# 字符串中不是字母的都为分隔符
print("fds=fdfa-fafd?fafda#fad".title())
# 字符串每个字母小写 lower
# 注意事项:lower 函数并不会修改字符串本身
print("ABCDE".lower())
# 字符串每个字母大写 upper
# 注意事项:upper 函数并不会修改字符串本身
print(s.upper())
# 字符串填充 ljust
# 原字符串靠左填充 ljust
# 注意事项:ljust 函数并不会修改字符串本身
# 填充的字符串长度必须为1
# ljust 函数:s.ljust(width, fillchar)
# 只有当原字符串长度小于 width时才会填充
print(s.ljust(20, "*"))
# 字符串填充 rjust
# 原字符串靠右填充
# 注意事项:rjust 函数并不会修改字符串本身
# 填充的字符串长度必须为1
# rjust 函数:s.rjust(width, fillchar)
# 只有当原字符串长度小于 width时才会填充
print(s.rjust(20, "*"))
# 字符串填充 center
# 原字符串靠中填充
# 注意事项:center 函数并不会修改字符串本身
# 填充的字符串长度必须为1
# center 函数:s.center(width, fillchar)
# 只有当原字符串长度小于 width时才会填充
# 左右不够分时, 右边多
print(s.center(20, "*"))
# 字符串压缩 lstrip
# 从左侧第一个字符开始检测, 如果没在指定字符内,就停止操作
# 仅仅只移除左侧的指定字符
# 指定字符默认为空白字符
# lstrip 函数:s.lstrip(chars)
print(s.lstrip())
print(" name is admin ".lstrip())
print(" name is admin ".lstrip("na"))
print("aabbis".lstrip("ab"))
# 字符串压缩 rstrip
# 从右侧第一个字符开始检测, 如果没在指定字符内,就停止操作
# 仅仅只移除右侧的指定字符
# 指定字符默认为空白字符
# rstrip 函数:s.rstrip(chars)
print("aabbis".rstrip("is"))
print("aabbisa".rstrip("is"))
# 字符串分割 split
# split(sep, maxsplit)
# 分割后返回列表
info = "1997 06 17"
result = info.split()
print(result)
info = "1997-06-17"
print(info.split("-"))
print(info.split("-", 1))
# 字符串分割 partition
# 从左侧开始查找分隔符
# 如果找到分隔符
# 根据指定的分隔符,返回(分隔符左侧内容,分隔符,分隔符右侧内容)
# 如果没找到分隔符
# 返回(原字符串, "", "")
# 返回类型为 tuple
info = "1997-06-17"
result = info.partition("-")
print(result)
print(info.partition("*"))
# 字符串分割 rpartition
# 从右侧开始查找分隔符
# 如果找到分隔符
# 根据指定的分隔符,返回(分隔符左侧内容,分隔符,分隔符右侧内容)
# 如果没找到分隔符
# 返回("", "", 原字符串)
# 返回类型为 tuple
info = "1997-06-17"
result = info.rpartition("-")
print(result)
print(info.rpartition("*"))
# 字符串分割 splitlines
# s.splitlines(keepends)
# 是否保留换行符
# 根据换行符\n, \r进行分割
# 返回类型为列表
info = "name\nis\nadmin"
print(info.splitlines())
info = "name\nis\nadmin"
# 保留换行符
print(info.splitlines(True))
# 字符串拼接 join
# join(iterable) 可迭代对象
# 字符串, 元组, 列表
# 返回值为字符串
items = ["1997", "06", "17"]
result = "-".join(items)
print(result)
print("-".join(s))
# 字符串判定函数
# 是否都是字母 isalpha
print("abc".isalpha())
# 是否都是数字 isdigit
print("123".isdigit())
# 是否都是数字或者字母 isalnum
print("abc123".isalnum())
# 是否都是空白字符 isspace
# 包括空格,缩进,换行等不可见转义符
print(" ".isspace())
print(" \n".isspace())
# 判定字符串是否以指定前缀开头 startswith
# s.startswith(prefix, start, end)
print("helloword".startswith("hello"))
print("helloword".startswith("he", 0, 2))
# 判定字符串是否以指定后缀结尾 endswith
# s.endswith(suffix, start, end)
print("test.doc".endswith(".doc"))
# 判定一个字符串是否被另一个字符串所包含
print("is" in "name is admin")
# 判定一个字符串是否不被另一个字符串所包含
print("is" not in "name is admin")