I want to replace all alphanumeric characters except white spaces in a string in iOS. Any compact solution?
This is my recent approach:
var strIn = "apple banana mushroom"
let a = (strIn).componentsSeparatedByString(" ")
var strReturn: NSString
for str in a {
let str3 = "".stringByPaddingToLength((str as NSString).length, withString: "*", startingAtIndex: 0)
strReturn = strReturn.stringByAppendingString(str3)
}
expected result is: "****** ****** ********"
A simple version could be something like that:
let strIn = "apple banana mushroom"
let words = strIn.componentsSeparatedByString(" ")
var starred: [String] = []
for word in words {
let stars = Array(count: word.characters.count, repeatedValue: "*").joinWithSeparator("")
starred.append(stars)
}
let result = starred.joinWithSeparator(" ")
Result:
"***** ****** ********"
You can make it an extension for easier usage:
extension String {
var stars:String {
let words = self.componentsSeparatedByString(" ")
var starred: [String] = []
for word in words {
let stars = Array(count: word.characters.count, repeatedValue: "*").joinWithSeparator("")
starred.append(stars)
}
return starred.joinWithSeparator(" ")
}
}
let starred = "apple banana mushroom".stars
You can also replace the loop with map
and produce some kind of monster one-liner. It's efficient but not very readable, so use at your own discretion:
extension String {
var stars:String {
return self.componentsSeparatedByString(" ").map { Array(count: $0.characters.count, repeatedValue: "*").joinWithSeparator("") }.joinWithSeparator(" ")
}
}
let starred = "apple banana mushroom".stars