我目前有一个字符串,它应该是一个数组:
var content = "['A','B','C']"
//What I want -> var content = ['A', 'B', 'C']
我需要删除引号,以便它只是一个数组,即String to Array。如何尝试?
答案 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?']"
),特别是由分隔符组成的字符串,您将得到一个与预期结果不匹配的数组。