删除字符串范围内的字符

时间:2016-05-27 13:08:09

标签: ios iphone swift macos

我想要编辑以下字符串:

var someString = "I wan't this text {something I don't want}"

我想删除两个大括号中包含的所有文本,无论文本有多长。当我知道范围时,我一直在使用以下代码删除字符串的一部分:

extension String {
    mutating func deleteCharactersInRange(range: NSRange) {
        let mutableSelf = NSMutableString(string: self)
        mutableSelf.deleteCharactersInRange(range)
        self = mutableSelf
    }
}

但是,我不知道问题的范围。有什么想法吗?

3 个答案:

答案 0 :(得分:4)

NSStringNSRange与Swift的StringRange混合使用时,使用字符串和范围可能非常具有挑战性。

这是一个纯粹的Swift解决方案。

var someString = "I wan't this text {something I don't want}"

let rangeOpenCurl = someString.rangeOfString("{")
let rangeCloseCurl = someString.rangeOfString("}")
if let startLocation = rangeOpenCurl?.startIndex,
    let endLocation = rangeCloseCurl?.endIndex {
    someString.replaceRange(startLocation ..< endLocation, with: "")
}

答案 1 :(得分:1)

使用RegEx模式匹配用大括号括起的任何内容:

var sourceString: String = "I wan\'t this text {something I don't want}"

let destinationString = sourceString.stringByReplacingOccurrencesOfString("\\{(.*?)\\}", withString: "", options: .RegularExpressionSearch)

print(destinationString)

这将打印“我不是这个文字”,没有双引号。

答案 2 :(得分:0)

extension String {
    func getCurlyBraceRanges() -> [NSRange] {
        var results = [NSRange]()
        var leftCurlyBrace = -1
        for index in 0..<self.characters.count {
            let char = self[self.startIndex.advancedBy(index)]
            if char == Character("{") {
                leftCurlyBrace = index
            } else if char == Character("}") {
                if leftCurlyBrace != -1 {
                    results.append(NSRange(location: leftCurlyBrace, length: index - leftCurlyBrace + 1))
                    leftCurlyBrace = -1
                }
            }

        }
        return results
    }
    mutating func deleteCharactersInRange(range: NSRange) {
        let mutableSelf = NSMutableString(string: self)
        mutableSelf.deleteCharactersInRange(range)
        self = String(mutableSelf)
    }
    mutating func deleteCharactersInRanges(ranges: [NSRange]) {
        var tmpString = self
        for i in (0..<ranges.count).reverse() {
            tmpString.deleteCharactersInRange(ranges[i])
            print(tmpString)
        }
        self = tmpString
    }
}

var testString = "I wan't this text {something I don't want}"

testString.deleteCharactersInRanges(testString.getCurlyBraceRanges())

输出:&#34;我想要这个文字&#34;