首页 > 解决方案 > 根据符号 $$ 和 && 拆分字符串以访问 Swift 中的数据

问题描述

我有一个包含 Id 和演示名称的字符串。字符串格式为 $$Id&&presentationName

$$5955&&演示名称1 [克隆]$$7460&&演示名称2 $$7473&&演示名称3$$7626&&演示名称4 [克隆]$$7460&&演示名称5$$7123&&演示名称6

我想根据符号 $$ 和 && 将字符串拆分为两个数组,其中包含 ID 和演示名称。我是iOS新手,请帮忙。

预期输出:arrayID = [5955, 7460, 7473, 7626, 7460, 7123]

arrayPresentationNames = ["Presentation Name1 [CLONE]", "Presentation Name2", "Presentation Name3", "Presentation Name5", "Presentation Name5", "Presentation Name6"]

我已经尝试过如下但没有成功。

    let separators = NSCharacterSet(charactersInString: "&&")
    var fullStr: String = "$$3232&&presentation name";
    var words = fullStr.componentsSeparatedByCharactersInSet(separators)

标签: swiftstring

解决方案


这是一种使用正则表达式将字符串解析为自定义结构的解决方案

struct Presentation {
    let id : Int
    let name : String
}

let string = "$$5955&&Presentation Name1 [CLONE]$$7460&&Presentation Name2 $$7473&&Presentation Name3$$7626&&Presentation Name4 [CLONE]$$7460&&Presentation Name5$$7123&&Presentation Name6"

let regex = try! NSRegularExpression(pattern: "\\$\\$(\\d+)&&([^\\$]+)")
let matches = regex.matches(in: string, range: NSRange(string.startIndex..., in: string))
let presentations = matches.map { match -> Presentation in
    let numberRange = Range(match.range(at: 1), in: string)!
    let nameRange = Range(match.range(at: 2), in: string)!
    return Presentation(id: Int(string[numberRange])!, name: String(string[nameRange]))
}

print(presentations)

推荐阅读