Python 创建一个类,用于实现基本的字符串操作:查找、替换、反转等(千字长文)

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 类封装了字符串查找、替换、反转等核心操作,提供可直接使用的代码框架和扩展方案。