【问题标题】:How to remove characters from a String in swift如何快速从字符串中删除字符
【发布时间】:2015-11-27 04:02:45
【问题描述】:

我正在寻找一种简单的方法来从 shuffledWord1 中删除 tilesColored String "ment" 中的 4 个字符。

var word1: String = "employment"
var shuffledWord1: String = "melpyoemtn"

var tilesColored: String = "ment"
var characters = Array(tilesColored) // gives ["m","e","n","t"]

let newWord1 = word1.StringByReplacingOccurencesOfString("\(characters[0])", withString:"") // gives "elpyoetn"

stringByReplacingOccurencesOfString 只允许检查 1 个字符并删除两个 m,那么我如何检查所有 4 个字符并只删除每个实例的一个实例以返回“melpyo”?

提前感谢您提供的任何帮助

【问题讨论】:

  • 您是要删除最后 4 个字符,还是要删除 m、e、n 和 t 的一个实例,但不按任何特定顺序?
  • 嗨,基思。我正在尝试删除彩色瓷砖 m,e,n,t 的实例

标签: ios string swift


【解决方案1】:
extension String {
    func removeCharacters(characters: String) -> String {
        let characterSet = NSCharacterSet(charactersInString: characters)
        let components = self.componentsSeparatedByCharactersInSet(characterSet)
        let result = components.joinWithSeparator("")
        return result
    }
}

【讨论】:

    【解决方案2】:

    斯威夫特 5:

    var phrase = "The rain in Spain stays mainly in the plain."
    
    let vowels: Set<Character> = ["a", "e", "i", "o", "u"]
    phrase.removeAll(where: { vowels.contains($0) })
    // phrase == "Th rn n Spn stys mnly n th pln."
    

    【讨论】:

    • 不起作用,表示表达式类型需要更多上下文4
    • 非常适合我的需求。谢谢。
    【解决方案3】:

    Swift 3+ 版本的性能比之前的热门答案更好。 (因为我们没有用子字符串分隔成数组,所有这些都需要单独分配。)

    这里只适用于 unicode 标量级别。您可以将其直接粘贴到 Playground 中。

    import Foundation
    
    extension String {
    
        func removeCharacters(from forbiddenChars: CharacterSet) -> String {
            let passed = self.unicodeScalars.filter { !forbiddenChars.contains($0) }
            return String(String.UnicodeScalarView(passed))
        }
    
        func removeCharacters(from: String) -> String {
            return removeCharacters(from: CharacterSet(charactersIn: from))
        }
    }
    
    let str = "n1o d2i3g4i5t6s!!!789"
    
    let t1 = str.removeCharacters(from: CharacterSet.decimalDigits.inverted)
    print(t1) // will print: 123456789
    
    let t2 = str.removeCharacters(from: "0123456789")
    print(t2) // will print: no digits!!!
    

    【讨论】:

    • 完美运行
    【解决方案4】:

    Macondo2Seattle 答案的 Swift 3 版本,我认为这是最优雅的解决方案。

    extension String {
        func removing(charactersOf string: String) -> String {
            let characterSet = CharacterSet(charactersIn: string)
            let components = self.components(separatedBy: characterSet)
            return components.joined(separator: "")
        }
    }
    

    【讨论】:

      【解决方案5】:

      斯威夫特 2.0:

      extension String {
        func stringByRemovingOnce(chars: String) -> String {
          var cs = Set(chars.characters)
          let fd = characters.filter { c in
            cs.remove(c).map { _ in false } ?? true
          }
          return String(fd)
        }
      }
      
      "melpyoemtn".stringByRemovingOnce("ment") // "lpyoem"
      

      斯威夫特 1.2:

      extension String {
        func stringByRemovingOnce(chars: String) -> String {
          var cs = Set(chars)
          let fd = filter(self) { c in
            cs.remove(c).map { _ in false } ?? true
          }
          return String(fd)
        }
      }
      
      "melpyoemtn".stringByRemovingOnce("ment") // "lpyoem"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-11
        • 1970-01-01
        • 2013-03-04
        • 1970-01-01
        • 1970-01-01
        • 2022-07-24
        • 1970-01-01
        • 2021-01-08
        相关资源
        最近更新 更多