【问题标题】:Delete characters in range of string删除字符串范围内的字符
【发布时间】:2016-05-27 13:08:08
【问题描述】:

我想编辑以下字符串:

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
    }
}

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

【问题讨论】:

  • @Alexander 抱歉快速而错误的回复。已在操场上使用您的扩展程序进行了测试......它现在可以工作了。

标签: ios iphone swift macos


【解决方案1】:

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: "")
}

【讨论】:

    【解决方案2】:

    使用正则表达式匹配任何用大括号括起来的内容:

    var sourceString: String = "I wan\'t this text {something I don't want}"
    
    let destinationString = sourceString.stringByReplacingOccurrencesOfString("\\{(.*?)\\}", withString: "", options: .RegularExpressionSearch)
    
    print(destinationString)
    

    这将打印 "I wan't this text " 没有双引号。

    【讨论】:

      【解决方案3】:
      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())
      

      输出:“我不想要这个文本”

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-19
        • 1970-01-01
        • 2012-06-11
        • 1970-01-01
        相关资源
        最近更新 更多