我正在寻找一种简单的方法来从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)
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)
斯威夫特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)
归档时间: |
|
查看次数: |
10701 次 |
最近记录: |