Python 创建一个类,用于实现基本的字符串操作:查找、替换、反转等
快速解决
定义一个 StringOps 类,封装查找、替换、反转等基础方法,通过实例调用操作:
class StringOps:
def __init__(self, text):
self.text = text # 存储输入字符串
def find_all(self, target):
# 查找所有匹配项并返回索引列表
return [i for i in range(len(self.text)) if self.text.startswith(target, i)]
def replace_all(self, old, new):
# 替换所有匹配项并返回新字符串
self.text = self.text.replace(old, new)
return self.text
def reverse(self):
# 反转字符串并返回结果
return self.text[::-1]
常用方法
| 方法名 | 功能描述 | 参数 | 返回值 | 使用频率 |
|---|---|---|---|---|
find_all |
查找所有匹配字符索引 | target |
索引列表 | ⭐⭐⭐⭐ |
replace_all |
替换所有匹配字符 | old, new |
新字符串 | ⭐⭐⭐⭐ |
reverse |
反转字符串 | 无 | 反转后的字符串 | ⭐⭐⭐ |
count |
统计匹配字符出现次数 | target |
整数 | ⭐⭐⭐ |
is_palindrome |
判断是否为回文 | 无 | 布尔值 | ⭐⭐ |
strip_chars |
自定义去空格字符 | chars |
新字符串 | ⭐⭐ |
详细说明
查找所有匹配项
class StringOps:
def find_all(self, target):
# 使用列表推导式遍历所有可能的起始索引
# startswith 方法检查当前位置是否匹配目标字符
return [i for i in range(len(self.text)) if self.text.startswith(target, i)]
示例:
ops = StringOps("ababa")
print(ops.find_all("aba")) # 输出 [0, 2]
替换所有匹配项
def replace_all(self, old, new):
# 使用内置 replace 方法执行全局替换
# 修改实例属性 text 保存新状态
self.text = self.text.replace(old, new)
return self.text
示例:
ops = StringOps("hello world")
print(ops.replace_all("l", "x")) # 输出 "hexxo worxd"
反转字符串
def reverse(self):
# 使用切片语法 [::-1] 实现字符反转
# 保留原始字符串状态
return self.text[::-1]
示例:
ops = StringOps("12345")
print(ops.reverse()) # 输出 "54321"
高级技巧
链式调用优化
通过返回 self 实现方法串联:
def replace_all(self, old, new):
self.text = self.text.replace(old, new)
return self # 返回实例自身支持链式调用
ops = StringOps("apple banana cherry")
result = ops.replace_all("a", "X").replace_all("e", "Y").reverse()
print(result) # 输出 "Yrrehc XnnabX plppX"
添加日志记录
增强类的功能可追踪性:
def __init__(self, text):
self.text = text
self.history = [] # 记录操作历史
def replace_all(self, old, new):
original = self.text
self.text = self.text.replace(old, new)
self.history.append(f"Replace: {old} → {new} (原值: {original})")
return self
常见问题
Q1:如何实现区分大小写的查找?
A:在 startswith 前添加 self.text[i] == target[0] 判断首字符,或使用正则表达式 re.finditer 实现精确匹配。
Q2:替换操作会修改原始字符串吗?
A:不会,replace_all 方法会创建新字符串并更新实例属性,原始字符串数据保持不变。
Q3:如何查找子字符串出现的次数?
A:扩展 count 方法:
def count(self, target):
# 计算匹配项的索引数量
return len(self.find_all(target))
总结
本文通过 Python 类封装了字符串查找、替换、反转等核心操作,提供可直接使用的代码框架和扩展方案。