我正在搜索用于转换字符串的内置函数 “01092030”(格式“[[dd] hh] mmss”)四个单独的整数。
dd和hh是可选的。如果缺少它们应该是0.我可以通过开发一个特殊函数来实现它,但我喜欢使用类似正则表达式的东西。
答案 0 :(得分:3)
我没有看到你的“内置函数”或“正则表达式”要求的重点,但无论如何......
let s = "092030" as NSString
let pattern = "\\d\\d"
let reg = try! NSRegularExpression(pattern: pattern, options: [])
let matches = reg.matchesInString(s as String, options: [], range: NSMakeRange(0, s.length))
var result = matches.map {s.substringWithRange($0.range)}
while result.count < 4 {
result.insert("0", atIndex: 0)
}
// result is: ["0", "09", "20", "30"]
我对你的输出要求也有点不清楚。一方面,你说你想要四个“个体整数”。但“09”不是整数;它是一个表示整数的字符串。所以在我看来你真的想要字符串。如果是,则result
是期望的结果。如果没有,那么您还需要一个步骤:
let result2 = result.map{Int($0)!}
// result2 is: [0, 9, 20, 30]
答案 1 :(得分:1)
由于字符串包含日期组件,您可以使用NSDateFormatter
let string = "01092030"
let dateFormatter = NSDateFormatter()
let dayMissing = string.characters.count < 8
let hourMissing = string.characters.count < 6
dateFormatter.dateFormat = hourMissing ? "mmss" : dayMissing ? "HHmmss" : "ddHHmmss"
let date = dateFormatter.dateFromString(string)!
let components = NSCalendar.currentCalendar().components([.Day, .Hour, .Minute, .Second], fromDate: date)
let second = components.second
let minute = components.minute
let hour = components.hour
let day = dayMissing ? 0 : components.day