How to strip special characters out of string?

三世轮回 提交于 2019-12-06 09:13:50

问题


I have a set with the characters I allow in my string:

var characterSet:NSCharacterSet = NSCharacterSet(charactersInString: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLKMNOPQRSTUVWXYZ")

I want to strip any other characters from a string so two unformatted data can be considered equal, like this:

"American Samoa".lowercaseString == "american_samoa1".lowercaseString

the lowercase version of these transformed strings would be "americansamoa"


回答1:


Let's write a function for that (in swift 1.2).

func stripOutUnwantedCharactersFromText(text: String, set characterSet: Set<Character>) -> String {
    return String(filter(text) { set.contains($0) })
}

You can call it like that:

let text = "American Samoa"
let chars = Set("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
let strippedText = stripOutUnwantedCharactersFromText(text, set: chars)

Pure swift. Yeah.




回答2:


You were on the right track. But you can use the invertedSet on your NSCharSet. That means you allow every character you set in your NSCharSet, because it's easier to do that way. Otherwise you'd need to check every char you don't want to allow which are many more than set the allowed ones:

var charSet = NSCharacterSet(charactersInString: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ").invertedSet
var unformatted = "american_samoa1"
var cleanedString = join("", unformatted.componentsSeparatedByCharactersInSet(charSet))

println(cleanedString) // "americansamoa"

As you see, I use the join method on the created array. I do that because you really want a string and otherwise you'd have a array of strings.




回答3:


Updated the below example for Swift 2.3 to replace the join method.

let charSet = NSCharacterSet(charactersInString: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ").invertedSet
let unformatted = "american_samoa1"
let cleanedString = unformatted.componentsSeparatedByCharactersInSet(charSet)).joinWithSeparator("")

print(cleanedString) // "americansamoa"



回答4:


Swift 3 upgraded answer:

let jpegName = "<Hit'n'roll>.jpg"
let disallowedChars = CharacterSet.urlPathAllowed.inverted
let fileName = fileName.components(separatedBy: disallowedChars).joined(separator: "_")



回答5:


This currently works for swift 3.X

func strip(unformatted: String) -> String {
    let disallowedChars = CharacterSet.letters.inverted
    let formatted = unformatted.components(separatedBy: disallowedChars).joined(separator: "")
    return formatted.lowercased()
}


来源:https://stackoverflow.com/questions/28819779/how-to-strip-special-characters-out-of-string

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!