修剪字符串中的双引号(“)

时间:2019-04-17 14:27:04

标签: swift trim character-trimming

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

  

\“ {]}

字符串中的

。除双引号外,其他所有东西都正常运行。

我的字符串是:

  

{“ fileId”:1902,“ x”:38,“ y”:97}

执行以下操作后:

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

打印:

  

fileId“:1902,” x“:38,” y“:97

它删除了第一个双引号,但没有其他双引号。如何修剪不带双引号的字符串?

2 个答案:

答案 0 :(得分: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)
}

答案 1 :(得分:2)

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

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

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