将引号中的数组转换为数组

时间:2016-04-16 22:56:04

标签: arrays string swift

我目前有一个字符串,它应该是一个数组:

var content = "['A','B','C']"
//What I want -> var content = ['A', 'B', 'C']

我需要删除引号,以便它只是一个数组,即String to Array。如何尝试?

3 个答案:

答案 0 :(得分:1)

这与JSON语法类似,只是单引号应该是双引号。

那么,让我们这样做:

let source = "['A','B','C']"

用双引号替换单引号:

let content = source.stringByReplacingOccurrencesOfString("'", withString: "\"")

然后将String转换为NSData(变为有效的JSON):

guard let data = content.dataUsingEncoding(NSUTF8StringEncoding) else { fatalError() }

最后,将JSON数据转换回字符串的Swift数组:

guard let arrayOfStrings = try NSJSONSerialization.JSONObjectWithData(data, options: []) as? [String] else { fatalError() }

结果:

print(arrayOfStrings)
  

[" A"," B"," C"]

print(arrayOfStrings[1])
  

" B"

答案 1 :(得分:0)

这是针对您的具体示例的半hacky解决方案。

let content = "['A','B','C']"
var characters = content.characters
characters.removeFirst(2) // Remove ['
characters.removeLast(2)  // Remove ']
let contentArray = String(characters).componentsSeparatedByString("','")
print(contentArray) // ["A", "B", "C"]

<强>声明/警告: 此解决方案不健壮,因为它期望您的数组仅包含以'个字符包装的对象。但是,它适用于任何长度的字符串(例如,将A替换为foo将起作用。)

如果您的实际内容字符串比您在此处的内容更复杂,那么我会采用Rob的建议并尝试JSON序列化(特别是如果此字符串来自您不像服务器那样控制的地方)。

答案 2 :(得分:0)

你可以这样做:

let arr = content.componentsSeparatedByCharactersInSet(NSCharacterSet (charactersInString: "['],")).filter({!$0.isEmpty})

<强>解释

  • 首先,我们根据以下分隔符将字符串拆分为数组:[',]

  • 我们现在有一个包含一些空字符串的数组,我们使用filter()删除它们。

  • 和Voila!

警告

像@nebs的警告一样,小心这个解决方案。如果您的字符串由更复杂的字符串组成(例如:"['Hello [buddy]', 'What's up?', 'This is a long text, or not?']"),特别是由分隔符组成的字符串,您将得到一个与预期结果不匹配的数组。