Обрезать двойные кавычки (") из строки - PullRequest
3 голосов
/ 17 апреля 2019

У меня есть строка, и мне нужно удалить из строки следующие символы

\ "{]}

. Все работает нормально, кроме двойной кавычки.

Моя строка:

{"fileId": 1902, "x": 38, "y": 97}

после следующеговыполняются операции:

let charsToBeDeleted = CharacterSet(charactersIn: "\"{]}")
let trimmedStr = str.trimmingCharacters(in: charsToBeDeleted)
print(trimmedStr)

печать:

fileId ": 1902," x ": 38," y ": 97

Itусеченная первая двойная кавычка, но не остальные.Как я могу обрезать эту строку без двойных кавычек?

Ответы [ 2 ]

8 голосов
/ 17 апреля 2019

trimmingCharacters(in - неправильный API.Он удаляет символы из начала ({") и конца (}) строки, но не изнутри.

Что вы можете сделать, это использовать replacingOccurrences(of с параметром регулярного выражения.

let trimmedStr = str.replacingOccurrences(of: "[\"{\\]}]", with: "", options: .regularExpression)

[] - это регулярное выражение, эквивалентное CharacterSet.
Обратная косая черта необходима для того, чтобы избежать двойной кавычки и рассматривать закрывающую скобку как литерал.


Но не надо отделка .Это строка JSON.Десериализовать его в словарь

let str = """
{"fileId":1902,"x":38,"y":97}
"""

do {
    let dictionary = try JSONSerialization.jsonObject(with: Data(str.utf8)) as! [String:Int]
    print(dictionary)
} catch {
    print(error)
}

Или даже в структуру

struct File : Decodable {
    let fileId, x, y : Int
}

do {
    let result = try JSONDecoder().decode(File.self, from: Data(str.utf8))
    print(result)
} catch {
    print(error)
}
2 голосов
/ 17 апреля 2019

Я не проверял это, но было бы что-то вроде этого:

Возможно, вам придется проверить, правильно ли используется экранирование символов для \ и " внутри набора.

let charsToDelete:Set<Character> = ["\\", "\"", "{", "]", "}"]
str.removeAll(where: { charsToDelete.contains($0)})
print(str)
...