3

我有一个字符串,我需要删除以下字符

\ " { ] }

从一个字符串。除双引号外,一切正常。

我的字符串是:

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

执行以下操作后:

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

印刷:

文件 ID":1902,"x":38,"y":97

它修剪了第一个双引号,但没有修剪其他双引号。如何在没有双引号的情况下修剪此字符串?

4

2 回答 2

8

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)
}
于 2019-04-17T14:32:24.923 回答
2

我没有对此进行测试,但它会是这样的:

您可能必须检查是否正确使用了集合内和集合内的\字符转义。"

let charsToDelete:Set<Character> = ["\\", "\"", "{", "]", "}"]
str.removeAll(where: { charsToDelete.contains($0)})
print(str)
于 2019-04-17T14:36:34.817 回答