Swift - Как удалить специальный символ без удаления Emoji из строки? - PullRequest
1 голос
/ 11 июля 2019

Как удалить все специальные символы из строки без удаления Emoji?

Я пробовал:

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

Но эта функция также удаляет мои смайлики из моей строки.

Ожидаемый результат:

"Привет, ребята!? Нужны деньги $ ?"

Фактический результат:

"Привет, ребята, нужны деньги ?"

Ответы [ 2 ]

2 голосов
/ 11 июля 2019

Вы можете использовать расширение ниже, чтобы сделать ваше предложение идеальным в соответствии с желаемым выводом.

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 ?
2 голосов
/ 11 июля 2019

Вопрос здесь в том, как понять, является ли персонаж эмодзи или нет. У 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  ?

...