【问题标题】:convert string?转换字符串?
【发布时间】:2018-09-25 04:14:17
【问题描述】:

我得到一个这样的字符串:

let arrayString : String = "[[1, 123, 0], [4, 003, 21]]"

我想将此字符串转换为这种类型的二维数组:[[String]]


我尝试过使用类似这样的行:

var array : [[String]]  = arrayString as! [[String]]; // abort error

还有类似的:

if let json = try? JSONSerialization.jsonObject(with: ucode.data(using: .utf8)!, options: []) {
        let array = json as! [[String]];
        print(array[0][0]) // prints nothing --> just ""
    }

所以我不知道如何解决转换问题:

"[[1, 123, 0], [4, 003, 21]]" ----> [["1", "123", "0"], ["4", "003", "21"]]

任何帮助将不胜感激,在此先感谢一百万。

【问题讨论】:

  • 可能不相关,但在某些时候我认为将其转换为 2D ints 数组会导致“003”变为“3”,您可以吗?
  • 嘿,谢谢你的评论 - 不,这是一个大问题:字符串是 int 格式,语法无效,如 003 而不是 3 但我需要返回一个像 "003" 这样的字符串,所以不。在这种情况下,“3”是不行的! :)

标签: arrays swift string type-conversion


【解决方案1】:

这个字符串基本上是 JSON,但是序列化器会抱怨前导零。

一种解决方案是通过在反序列化 JSON 之前添加双引号将整数值转换为String。这可以通过正则表达式简单地实现

let arrayString = "[[1, 123, 0], [4, 003, 21]]"
let convertedArrayString = arrayString.replacingOccurrences(of: "\\d+", with: "\"$0\"", options: .regularExpression)
let data = Data(convertedArrayString.utf8)
do {
    if let array = try JSONSerialization.jsonObject(with: data) as? [[String]] {
        print(array)
    }
} catch { print(error)}

【讨论】:

  • 感谢四位您的解决方案。
【解决方案2】:

我尝试测试您的代码并发现此错误:

let arrayString: String = "[[1, 123, 0], [4, 003, 21]]"

Error Domain=NSCocoaErrorDomain Code=3840 "第 19 位字符前后带有前导零的数字。(003)

这意味着您的 arrayString 的 json 格式不正确。

JSON 字符串不能有前导零字符的数字。

我从您的 arrayString 中删除了前导零字符,它工作正常。

    let arrayString : String = "[[1, 123, 0], [4, 3, 21]]"
    do {
        let json = try JSONSerialization.jsonObject(with: arrayString.data(using: .utf8)!, options: [])
        print(json)
    } catch (let error) {
        print(error.localizedDescription)
    }

【讨论】:

  • 感谢您的快速回答,但这是个大问题:我需要前导零“003”而不是“3”。
  • 这不是我想要的解决方案。 -1
猜你喜欢
  • 1970-01-01
  • 2019-10-10
  • 1970-01-01
  • 2019-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多