【问题标题】:How to strip special characters out of string?如何从字符串中去除特殊字符?
【发布时间】:2015-03-02 21:30:28
【问题描述】:

我有一个字符串中允许的字符集:

var characterSet:NSCharacterSet = NSCharacterSet(charactersInString: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLKMNOPQRSTUVWXYZ")

我想从字符串中去掉 任何其他个字符,这样两个未格式化的数据就可以被认为是相等的,如下所示:

"American Samoa".lowercaseString == "american_samoa1".lowercaseString

这些转换后的字符串的小写版本是"americansamoa"

【问题讨论】:

    标签: regex string swift nsstring nscharacterset


    【解决方案1】:

    让我们为此编写一个函数(在 swift 1.2 中)。

    func stripOutUnwantedCharactersFromText(text: String, set characterSet: Set<Character>) -> String {
        return String(filter(text) { set.contains($0) })
    }
    

    你可以这样称呼它:

    let text = "American Samoa"
    let chars = Set("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
    let strippedText = stripOutUnwantedCharactersFromText(text, set: chars)
    

    纯粹的迅捷。是的。

    【讨论】:

    • 太棒了。一条评论。您的字符集中有 2 个 K。
    【解决方案2】:

    你在正确的轨道上。但是你可以在你的 NSCharSet 上使用invertedSet。这意味着您允许您在NSCharSet 中设置的每个字符,因为这样做更容易。否则,您需要检查您不想允许的每个字符,这些字符远不止设置允许的字符:

    var charSet = NSCharacterSet(charactersInString: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ").invertedSet
    var unformatted = "american_samoa1"
    var cleanedString = join("", unformatted.componentsSeparatedByCharactersInSet(charSet))
    
    println(cleanedString) // "americansamoa"
    

    如您所见,我在创建的数组上使用了join 方法。我这样做是因为你真的想要一个字符串,否则你会有一个字符串数组。

    【讨论】:

      【解决方案3】:

      为 Swift 2.3 更新了以下示例以替换 join 方法。

      let charSet = NSCharacterSet(charactersInString: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ").invertedSet
      let unformatted = "american_samoa1"
      let cleanedString = unformatted.componentsSeparatedByCharactersInSet(charSet)).joinWithSeparator("")
      
      print(cleanedString) // "americansamoa"
      

      【讨论】:

        【解决方案4】:

        Swift 3 升级答案:

        let jpegName = "<Hit'n'roll>.jpg"
        let disallowedChars = CharacterSet.urlPathAllowed.inverted
        let fileName = fileName.components(separatedBy: disallowedChars).joined(separator: "_")
        

        【讨论】:

          【解决方案5】:

          这目前适用于 swift 3.X

          func strip(unformatted: String) -> String {
              let disallowedChars = CharacterSet.letters.inverted
              let formatted = unformatted.components(separatedBy: disallowedChars).joined(separator: "")
              return formatted.lowercased()
          }
          

          【讨论】:

            猜你喜欢
            • 2016-02-20
            • 1970-01-01
            • 2011-04-11
            • 2016-01-23
            • 1970-01-01
            相关资源
            最近更新 更多