如何从swift中删除string

我正在寻找一种简单的方法来从shuffledWord1中移除tilesColoredstring“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”的一个实例?

预先感谢任何可能的帮助

Swift 3版本比以前的顶级答案有更好的performance。 (因为我们没有将子类分离成数组,所有这些都需要单独的分配。)

这里只是在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!!! 
 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:

 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:

 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" 

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

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

所以你想从右边开始只replace一个字符一次? 试试这个(Swift 2.0):

 var word1: String = "employment" var shuffledWord1: String = "melpyoemtn" var tilesColored: String = "ment" var searchOption : NSStringCompareOptions = .BackwardsSearch for c in tilesColored.characters { if let range = shuffledWord1.rangeOfString(String(c), options: searchOption) { shuffledWord1 = shuffledWord1.stringByReplacingCharactersInRange(range, withString: "") } } print(shuffledWord1) // melpyo 

如果您使用Swift 1.2,请删除.characters