如何从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) }) }