You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift 4字符串操作:实现删除指定字符间内容的函数

我来帮你完善这个字符串处理函数,根据你的需求,我提供两种不同的实现方案,分别对应不同的使用场景:

方案1:删除第一个起始字符到最后一个结束字符之间的所有内容

这个方案完全匹配你给出的示例需求——把从第一个(开始到最后一个)结束的所有内容(包括这两个字符本身)全部删除,只保留起始字符之前的部分(如果结束字符之后还有内容也会保留)。

func deleteInnerString(with string: String, from firstCharacter: String, to secondCharacter: String) -> String {
    // 处理空分隔符的边界情况
    guard !firstCharacter.isEmpty, !secondCharacter.isEmpty else {
        return string
    }
    
    // 定位第一个起始字符的位置
    guard let leftRange = string.range(of: firstCharacter) else {
        return string // 找不到起始字符,直接返回原字符串
    }
    let leftStartIndex = leftRange.lowerBound
    
    // 从起始字符的位置开始,反向查找最后一个结束字符的位置(确保结束字符在起始字符之后)
    guard let rightRange = string.range(of: secondCharacter, options: .backwards, range: leftStartIndex..<string.endIndex) else {
        return string // 找不到有效的结束字符,返回原字符串
    }
    let rightEndIndex = rightRange.upperBound
    
    // 拼接结果:起始字符之前的部分 + 结束字符之后的部分
    let prefix = string[..<leftStartIndex]
    let suffix = string[rightEndIndex...]
    return String(prefix + suffix)
}

测试你的示例

let originalString = "Boll %b‌ (Teeth ‌Alligator‌ (13,8,8,5,5,3,n),20,2,ma)"
let processedString = deleteInnerString(with: originalString, from: "(", to: ")")
print(processedString) // 输出:"Boll %b‌ "

(注:输出结果末尾的空格是原字符串中%b‌和(之间的空格,如果你需要去掉它,可以在函数末尾对结果做一次trimmingCharacters(in: .whitespaces)处理)


方案2:删除所有成对指定字符之间的内容(支持嵌套)

如果你的需求是删除所有出现的成对起始/结束字符之间的内容(比如处理"a(b)c(d)e"得到"ace",或者处理嵌套的"a(b(c)d)e"得到"ae"),可以用栈来跟踪嵌套层级,实现更通用的处理:

func deleteAllInnerStrings(with string: String, from firstChar: Character, to secondChar: Character) -> String {
    var result = ""
    var nestingStack = [Character]()
    
    for char in string {
        switch char {
        case firstChar:
            // 遇到起始字符,入栈标记嵌套层级
            nestingStack.append(char)
        case secondChar:
            // 遇到结束字符,若栈不为空则出栈(表示退出一层嵌套),否则保留该字符
            if !nestingStack.isEmpty {
                nestingStack.removeLast()
            } else {
                result.append(char)
            }
        default:
            // 只有当不在嵌套层级中时,才将字符加入结果
            if nestingStack.isEmpty {
                result.append(char)
            }
        }
    }
    
    return result
}

测试示例

// 你的原示例
let original = "Boll %b‌ (Teeth ‌Alligator‌ (13,8,8,5,5,3,n),20,2,ma)"
print(deleteAllInnerStrings(with: original, from: "(", to: ")")) // 输出:"Boll %b‌ "

// 多组括号的情况
let multiBracketStr = "Hello (world) foo (bar(baz)) test"
print(deleteAllInnerStrings(with: multiBracketStr, from: "(", to: ")")) // 输出:"Hello  foo  test"

内容的提问来源于stack exchange,提问作者Konstantinos Natsios

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:15:56