如何在swift中删除String中的字符

ric*_*chc 14 string ios swift

我正在寻找一种简单的方法来从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"
Run Code Online (Sandbox Code Playgroud)

stringByReplacingOccurencesOfString只允许检查1个字符并删除BOTH m,所以我如何检查所有4个并且只删除每个的一个实例以返回"melpyo"?

提前感谢您提供任何帮助

Lim*_*Red 16

Swift 3版本的性能优于之前的顶级答案.(因为我们没有将子串分成数组,所有这些都需要单独的分配.)

这里只适用于unicode标量级别.你可以将它粘贴到游乐场.

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!!!
Run Code Online (Sandbox Code Playgroud)


Yar*_*lav 8

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: "")
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 6

斯威夫特 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."
Run Code Online (Sandbox Code Playgroud)


ois*_*sdk 0

斯威夫特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"
Run Code Online (Sandbox Code Playgroud)

斯威夫特 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"
Run Code Online (Sandbox Code Playgroud)