如何在不删除表情符号的情况下从字符串中删除所有特殊字符?
我尝试过:
func removeSpecialCharsFromString(text: String) -> String {
let okayChars : Set<Character> =
Set("abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLKMNOPQRSTUVWXYZ1234567890-& ".characters)
return String(text.characters.filter {okayChars.contains($0) })
}
但是此功能也会从字符串中删除我的表情符号。
预期结果:
“大家好!?需要一些钱$?”
实际结果:
“大家好,需要钱?”
答案 0 :(得分:2)
这里的问题是如何理解字符是否是表情符号。 Swift有一个方便的isEmoji
方法,我们可以使用。
以下是使用isEmoji
方法的更新功能:
func removeSpecialCharacters(from text: String) -> String {
let okayChars = CharacterSet(charactersIn: "abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLKMNOPQRSTUVWXYZ1234567890-& ")
return String(text.unicodeScalars.filter { okayChars.contains($0) || $0.properties.isEmoji })
}
以防万一有人要在Playground中测试上面的代码:
let input = "Hello guys !? Need some money $ ?"
let output = removeSpecialCharacters(from: input)
print(output) // Prints: Hello guys Need some money ?
答案 1 :(得分:2)
您可以使用以下扩展名根据所需的输出使句子完美。
extension String {
var condensedWhitespace: String {
let components = self.components(separatedBy: NSCharacterSet.whitespacesAndNewlines)
return components.filter { !$0.isEmpty }.joined(separator: " ")
}
func removeSpecialCharacters() -> String {
let okayChars = CharacterSet(charactersIn: "abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLKMNOPQRSTUVWXYZ1234567890 ")
return String(self.unicodeScalars.filter { okayChars.contains($0) || $0.properties.isEmoji })
}
}
示例。
let input = "Hello guys !? Need some money $ ?"
print(input.removeSpecialCharacters().condensedWhitespace)
// Hello guys Need some money ?