简体   繁体   English

如何快速从字符串中删除字符

[英]How to remove characters from a String in swift

I am looking for a simple way to remove the 4 characters in the tilesColored String "ment" from the shuffledWord1.我正在寻找一种简单的方法来从 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 only allows 1 character to be checked and removes BOTH m's, so how can I check against all 4 and only remove ONE instance of each to return "melpyo"? stringByReplacingOccurencesOfString 只允许检查 1 个字符并删除两个 m,那么我如何检查所有 4 个字符并且只删除每个实例的一个实例以返回“melpyo”?

Thanks in advance for any help possible在此先感谢您提供任何可能的帮助

Swift 3+ version with better performance than the previous top answers. Swift 3+ 版本的性能比以前的最佳答案更好。 (Because we don't separate into arrays with substrings, which all would need seperate allocations.) (因为我们没有将子字符串分成数组,所有子字符串都需要单独分配。)

This here just works on the unicode scalar level.这仅适用于 unicode 标量级别。 You can paste it right into a 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!!!

Swift 3 version of Macondo2Seattle's answer, which, I think, is the most elegant solution. 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: "")
    }
}

Swift 5:斯威夫特 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."
extension String {
    func removeCharacters(characters: String) -> String {
        let characterSet = NSCharacterSet(charactersInString: characters)
        let components = self.componentsSeparatedByCharactersInSet(characterSet)
        let result = components.joinWithSeparator("")
        return result
    }
}

Swift 2.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"

Swift 1.2:斯威夫特 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"

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM