Skip to content

Instantly share code, notes, and snippets.

@algal
Created November 3, 2016 19:23
Show Gist options
  • Save algal/c638ecdbaff84ad29f579035a3394f48 to your computer and use it in GitHub Desktop.
Save algal/c638ecdbaff84ad29f579035a3394f48 to your computer and use it in GitHub Desktop.
Filter a string by a CharacterSet
// known-good: Xcode 8.1, Swift 3
extension String {
func keepingCharacters(inCharacterSet allowedCharacters:CharacterSet) -> String {
var filteredString:String = ""
var rangeToCheck:Range<String.Index> = self.startIndex..<self.endIndex
while true {
if let allowedCharRange = self.rangeOfCharacter(from: allowedCharacters,
options: [],
range: rangeToCheck) {
filteredString.append(self.substring(with: allowedCharRange))
rangeToCheck = Range(uncheckedBounds:
(lower: allowedCharRange.upperBound, upper: rangeToCheck.upperBound))
}
else {
break
}
}
return filteredString
}
}
extension String {
func removingCharacters(inCharacterSet forbiddenCharacters:CharacterSet) -> String {
var filteredString = self
while true {
if let forbiddenCharRange = filteredString.rangeOfCharacter(from: forbiddenCharacters) {
filteredString.removeSubrange(forbiddenCharRange)
}
else {
break
}
}
return filteredString
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment