【问题标题】:Trim double quotation mark(") from a string从字符串中修剪双引号(“)
【发布时间】:2019-04-17 14:27:03
【问题描述】:

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

\ " { ] }

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

我的字符串是:

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

执行以下操作后:

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

打印:

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

它修剪了第一个双引号,但没有修剪其他的。不带双引号怎么修整这个字符串?

【问题讨论】:

    标签: swift trim character-trimming


    【解决方案1】:

    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)
    }
    

    【讨论】:

    • 糟糕,我的同步编辑破坏了您的更改。对不起@vadian
    • @LinusGeffarth 没问题,有回滚功能。
    • 绝对是最好的方法
    【解决方案2】:

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

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

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

    【讨论】:

    • removeAll(where:) 是一个变异函数,因此您的代码只会打印()。我已经相应地修复了它。
    • 感谢@LinusGeffarth
    猜你喜欢
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多