我有一个字符串,我需要删除以下字符
字符串中的\“ {]}
。除双引号外,其他所有东西都正常运行。
我的字符串是:
{“ fileId”:1902,“ x”:38,“ y”:97}
执行以下操作后:
let charsToBeDeleted = CharacterSet(charactersIn: "\"{]}")
let trimmedStr = str.trimmingCharacters(in: charsToBeDeleted)
print(trimmedStr)
打印:
fileId“:1902,” x“:38,” y“:97
它删除了第一个双引号,但没有其他双引号。如何修剪不带双引号的字符串?
答案 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)