Trim 来自字符串的双引号 (")

Trim double quotation mark(") from a string

我有一个字符串,我需要删除后面的字符

\ " { ] }

来自字符串。除了双引号外,一切正常。

我的字符串是:

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

执行以下操作后:

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

打印:

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

它 trim第一个双引号而不是其他双引号。我如何 trim 这个字符串不带双引号?

trimmingCharacters(in是错误的API。它删除字符串开头 ({") 和结尾 (}) 中的字符,但不删除字符串中的字符。

您可以使用 replacingOccurrences(of 和正则表达式选项。

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

[]CharacterSet.
的等价正则表达式 反斜杠是转义双引号并将右括号视为文字所必需的。


但不要trim。这是一个 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)
}

我还没有测试过,但它会是这样的:

您可能需要检查集合中 \" 的字符转义是否使用正确。

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