Search code examples
iosstringswiftstr-replacemasking

How to replace alphanumeric values in string in iOS?


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: "****** ****** ********"


Solution

  • 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