如何从Swift 2中的string中删除特殊字符?

如何从string中去除特殊字符的答案? 不pipe用。

这是我得到的,它给了我一个错误

func removeSpecialCharsFromString(str: String) -> String { let chars: Set<String> = Set(arrayLiteral: "abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLKMNOPQRSTUVWXYZ1234567890+-*=(),.:!_") return String(str.characters.filter { chars.contains($0) }) //error here at $0 } 

$ 0的错误表示_Element(aka字符)不能转换为期望的参数types“string”。

喜欢这个:

 func removeSpecialCharsFromString(text: String) -> String { let okayChars : Set<Character> = Set("abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLKMNOPQRSTUVWXYZ1234567890+-*=(),.:!_".characters) return String(text.characters.filter {okayChars.contains($0) }) } 

这里是如何testing:

 let s = removeSpecialCharsFromString("père") // "pre" 

Swift 1.2中,

 let chars = Set("abcde...") 

创build一个包含给定string中所有字符的集合。 在Swift 2.0中,这必须按照

 let chars = Set("abcde...".characters) 

原因是一个string本身不再符合SequenceType ,你必须明确地使用characters视图。

随着这种变化,你的方法编译和按预期工作:

 func removeSpecialCharsFromString(str: String) -> String { let chars = Set("abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLKMNOPQRSTUVWXYZ1234567890+-*=(),.:!_".characters) return String(str.characters.filter { chars.contains($0) }) } let cleaned = removeSpecialCharsFromString("ab€xy") print(cleaned) // abxy 

备注: @Kametrixombuild议只创build一次。 因此, 如果上述方法存在性能问题,则可以将该集合的声明移到该函数之外,或者将其设置为本地static

 func removeSpecialCharsFromString(str: String) -> String { struct Constants { static let validChars = Set("abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLKMNOPQRSTUVWXYZ1234567890+-*=(),.:!_".characters) } return String(str.characters.filter { Constants.validChars.contains($0) }) }